C#枚举条目的名称中可以使用连字符吗?

14

有没有办法在枚举条目名称中使用连字符“-”,例如:

enum myEnum
{
   ok,
   not-ok,
}

我看到了关于枚举有友好名称的问题,但如果我可以直接使用连字符,这将节省我一些工作。

更新:我想使用连字符的原因是它使得在我无法控制的设置值列表中使用枚举变得容易,例如:

 rejected
 replaced
 local-bye
 remote-bye

7
如果您想从枚举值中拆分单词,请尝试使用驼峰命名法。 - benPearce
编程语言并不是人类语言,因此可能无法理解我们所能使用的每种变体。在我使用过的任何编程语言中,我从来没有看到过连字符,除了 TSQL 或 PLSQL 中的引用标识符外,这主要允许按结果集的方便列命名约定。驼峰式命名法是更好的方法。 - Will Marcouiller
可能是我的枚举可以拥有友好的名称吗?的重复。 - nawfal
4个回答

23

不,连字符是不允许的。

标识符

你可以用下划线替换连字符,但是如@benPearce建议的那样,采用驼峰命名法会是更好的选择,并且符合大多数C#编码规范。


1
我刚刚看了那个页面。我不知道为什么他们不能用下划线代替Pc并提供Unicode文档的参考。 - sipsorcery
我仍然找不到“连接符标点”的官方定义。 - Greg

17

假设你有:

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

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

c是否被设置为200或0?

如果在标识符中允许使用连字符,则使该语言几乎无法进行词法分析。由于“<<”和“>>”具有完全不同的含义,这种语言已经很难分析了;我们不想让自己更加困难。

命名指南建议对枚举值使用驼峰式大小写,请遵循此指南。


我很乐意遵循指南,但需要表示枚举的字符串列表不在我的控制范围内。词法分析可能很难,因为要删除带连字符的单词需要查阅半打RFC文件,这也不容易。 - sipsorcery

5

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

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"并且需要使用枚举,这可以帮助你。


我做了这样的事情:Status = sqlDataReader.GetString(5).Equals("NotChecked") ? "未检查" : "已检查",是的,它有效(因为我的枚举只有两个项目)。 - paraJdox1

0

你说:“我很乐意遵循指南,但需要表示的字符串列表不在我的控制范围内。”既然这就是你想要连字符的原因,我建议你覆盖所需枚举的toString()方法,并在需要表示名称的代码中调用toString()。


可能是可以的,但使用属性更有意义(请参见问题中的链接)。仅为了获取友好名称而重写ToString()方法是不合理的。 - Nikolai Samteladze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接