2010-02-24 27 views
12

是THRE没有办法有一个连字符枚举项,“ - ”,在名称,例如:一个C#枚举项可以在名称的连字符

enum myEnum 
{ 
    ok, 
    not-ok, 
} 

我见过的关于enums having friendly names的问题然而,如果我可以直接使用连字符,它会为我节省一些工作。

更新:我想用连字符的原因是它使得如它易于使用的枚举的,我有无法控制的设定值的列表:

rejected 
replaced 
local-bye 
remote-bye 
+7

如果你试图分裂话说出来枚举值,请尝试使用驼峰 – benPearce 2010-02-24 04:21:29

+0

-1编程语言不是指一个人的语言,因此可能无法了解每一个变化,我们有能力。在我使用过的任何编程语言中,除了TSQL或PLSQL中带引号的标识符外,我从未见过连字符,它们主要用于根据结果集进行方便的列命名约定。 CamelCase是非常平静的方法。 – 2010-02-25 14:23:22

+0

@ Marilliller:Thx对于这样一个惊人的见解!的 – sipwiz 2010-02-25 20:41:09

回答

20

没有,连字符不允许。

Identifiers

你可以明显替换用下划线连字符,但作为@benPearce建议,驼峰会是一个更好的选择,并与大多数C#编码标准。

+1

其实我只是一直在寻找在该页面。我不知道为什么他们不能只用_而不是Pc来引用unicode文档。 – sipwiz 2010-02-24 04:32:38

+0

我仍然无法找到“连接器标点符号”的官方定义 – Greg 2010-02-24 16:59:34

14

假设您有:

enum E { a = 100 , a-b = 200 }; 
... 

E b = E.a; 
int c = (int)(E.a-b); 

是C设为200,或者0?

允许在标识符中使用连字符将使语言几乎不可能在词法上分析。这种语言已经够难来分析一下与<<>>各自具有两个完全不同的含义;我们不想让自己变得更难。

的命名指南说,使用驼峰规则,枚举值;遵循指导原则。

+0

我很乐意遵守指导原则,但需要表示的字符串列表超出了我的控制范围。词法分析可能很难得到6个RFC来去除带连字符的单词也不容易。 – sipwiz 2010-02-24 19:53:23

0

你说“我会高兴地遵循的准则,但需要枚举表示字符串列表是在我的掌握”。由于这就是为什么你需要连字符的原因,所以我建议你重写你需要的枚举的toString()方法,并且在需要表示名字的代码中调用toString()方法。

+0

可能,但属性更有意义(请参阅问题中的链接)。重写ToString()只是为了获得友好的名字是不合理的。 – 2012-10-19 22:24:20

4

如果有人需要使用连字符。我觉得这个方法可以帮助:使用下划线在枚举声明,然后替换用连字符下划线。

enum myEnum { ok, not_ok, } 

var test = myEnum.not_ok; 
// let's say this value is coming from database or somewhere else 
var someValue = "not-ok"; 

if(test.ToString().Replace("_","-").equals(someValue)) { /* some stuff */ } 

不是最好的做法,但可以帮助,如果你没有在“someValue中”控制和需要使用枚举。

相关问题