[英]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.