簡體   English   中英

C#相當於Ruby符號

[英]C# equivalent of the Ruby symbol

我正在開發一個小C#應用程序以獲得樂趣。 我喜歡這種語言,但有些東西打擾了我......

有沒有辦法做#define(C模式)或符號(ruby模式)。

紅寶石符號非常有用。 它只是一些名稱前面帶有“:”(例如“:guy”),每個符號都是唯一的,可以在代碼中的任何位置使用。

在我的情況下,我想發送一個標志(連接或斷開連接)到一個功能。

最優雅的C#方式是什么?

這是我想做的事情:

BgWorker.RunWorkersAsync(:connect)
//...

private void BgWorker_DoWork(object sender, DoWorkEventArgs e)
{
  if (e.Arguement == :connect)
    //Do the job
}

在這一點上,我最喜歡的答案是枚舉解決方案;)

在您的情況下,發送標志可以通過使用枚舉...

public enum Message
{
  Connect,
  Disconnect
}

public void Action(Message msg)
{
   switch(msg)
   {
      case Message.Connect: 
         //do connect here
       break;
      case Message.Disconnect: 
          //disconnect
       break;
      default:
          //Fail!
       break;
   }
}

你可以使用一個字符串常量:

public const string Guy = "guy";

事實上,.NET中的字符串是特殊的。 如果聲明兩個具有相同值的字符串變量,它們實際上指向同一個對象:

string a = "guy";
string b = "guy";
Console.WriteLine(object.ReferenceEquals(a, b)); // prints True

C#不支持C風格的宏,盡管它仍然有#define。 有關這方面的理由,請查看msdn上的csharp FAQ博客

如果您的標志是用於條件編譯目的,那么您仍然可以這樣做:

#define MY_FLAG

#if MY_FLAG
  //do something
#endif

但如果沒有,那么你所描述的是配置選項,也許應該存儲在類變量或配置文件中而不是宏中。

與@Darin類似,但我經常在我的項目中創建一個Defs類來放置所有這些常量,以便有一種從任何地方訪問它們的簡單方法。

class Program
{
    static void Main(string[] args)
    {

        string s = Defs.pi;
    }
}
class Defs
{

    public const int Val = 5;
    public const string pi = "3.1459";
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM