为什么有些人使用“无”作为枚举成员?

时间:2010-04-16 06:22:02

标签: c#

我注意到一些枚举的“无”作为枚举成员。

例如我的意思

enum Mode
{
    Mode1 = 1,
    Mode2 = 2,
    Mode3 = 3,
    None = 4
}

为什么要使用它?在什么情况下,更优选不含有成员的溶液(不太优选)?

3 个答案:

答案 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的好处:

与其他值类型一样,未初始化枚举的默认值为零。非标志属性枚举应定义值为零的成员,以便默认值为枚举的有效值。如果合适,将成员命名为“无”。否则,将零分配给最常用的成员。请注意,如果未在声明中设置第一个枚举成员的值,则默认情况下其值为零。