Joe*_*Fan 3 c# enums coding-style
我有时看到过enum这样的事情:
public enum Color {
    None, Black, Red, Blue
}
代码如下:
Color color;
...
if (color == Color.None) ...
我更喜欢使用可以为空的枚举并像这样编码:
public enum Color {
    Black, Red, Blue
}
...
Color? color;
...
if (color == null) ...
哪种款式首选?
Jon*_*eet 10
一如既往,这取决于.
对于[Flags]枚举,None值几乎总是一个好主意,因为"这些选项中没有一个"是一个有用的概念.对于非[Flags]枚举,我通常不会包含None值,除非它显然在概念上有用.
也就是说,作为"开发类库的设计指南"的一部分,枚举指南包括:
在简单枚举上提供零值.
如果可能,请将此值命名为None.如果None不合适,请将值零分配给最常用的值(默认值).
...虽然示例不包含None,但.NET框架中的许多枚举也没有None值...
至于你是否应该使用可以为空的枚举 - 这实际上取决于具体情况.我会使用一个Color?变量"可能有一个Color值,或者可能没有"因为None真的不是一个明智的颜色.不具有None装置,其Enum.IsDefined(typeof(Color))是比较有用的,IMO.为什么枚举与任何其他非可空值类型不同?您通常不会使用0代表"我们没有任何信息" - 您可以使用int?代替.我建议以与你如何对待的方式对待enums int.
(说完了所有这些,我发现我在Noda Time中包含None了一个值IsoDayOfWeek,我觉得很惊讶,现在看着它.)