我注意到一些枚举的“无”作为枚举成员。
例如我的意思
enum Mode
{
Mode1 = 1,
Mode2 = 2,
Mode3 = 3,
None = 4
}
为什么要使用它?在什么情况下,更优选不含有成员的溶液(不太优选)?
答案 0 :(得分:11)
没有对[Flags]
枚举很重要,并且应该具有值0.否则......有问题。 Nullable<Mode>
也足够了。但是对于序列化或ORM层可能需要None
(它可能映射到预期的字符串/ int-value等)。或者它可能只是使API更简单。
答案 1 :(得分:4)
代码分析规则要求,出于官方原因,请参阅http://msdn.microsoft.com/en-us/library/ms182149(VS.100).aspx。
答案 2 :(得分:4)
逻辑上None
可能是一个有效的选择(取决于枚举的含义) - &gt;在一个交换机案例中可能有一个单独的分支(可以说 - 并不总是None
选项生成)
关于None
选项和Nullable<Mode>
变量:我会考虑None
以保持一致性:如果您有3个有效选项且None
是其中之一,为什么要区别对待?
如果您选择或不选择None
选项,则应始终将枚举值映射为0(默认选项)。 Hans Kesting提供的link提出了将值映射为0的好处:
与其他值类型一样,未初始化枚举的默认值为零。非标志属性枚举应定义值为零的成员,以便默认值为枚举的有效值。如果合适,将成员命名为“无”。否则,将零分配给最常用的成员。请注意,如果未在声明中设置第一个枚举成员的值,则默认情况下其值为零。