添加"Null"是个好习惯吗?或“;None"枚举的成员
本文关键字:quot None 枚举 成员 好习惯 Null 添加 | 更新日期: 2023-09-27 18:08:06
在c#中创建一个新的enum时,null成员是一个好的做法吗?
如果是,是否默认设置为0 ?你会调用null成员null还是null ?你是否严格相信Null,或者你对它的称呼不是Null没有任何问题。例如无。你能详细说明你的回答吗?
UPDATE:关于链接副本的广泛接受的答案倾向于使用可空类型,而不是定义一个"null"/"none"/0成员。下面描述的FxCop规则在Nullable
类型出现之前就存在了。
所以不是:
var myEnum = SomeEnumType.None;
您将使用Nullable
值类型将其定义为null
:
SomeEnumType? myEnum = null;
我仍然认为[Flags]
枚举中的None
成员是有用的。
之前答:
Visual Studio中有一个设计规则,CA1008,它为您的问题提供了一些见解。规则的描述是(样式化我的):
与其他值类型一样,未初始化枚举的默认值为0。非标志属性枚举应该定义一个值为0的成员,以便默认值是枚举的有效值。如果合适,将成员命名为'None'。否则,将最常用的成员赋值为0。请注意,默认情况下,如果在声明中没有设置第一个枚举成员的值,则其值为0。
如果一个应用了
FlagsAttribute
的枚举定义了一个零值成员,它的名字应该是'None',表示该枚举中没有设置任何值。将零值成员用于任何其他目的都与FlagsAttribute
的使用相反,因为与和或位操作符对该成员不起作用。这意味着只能将一个成员赋值为0。注意,如果在一个带有标志属性的枚举中出现多个值为0的成员,则Enum.ToString()
将为非0的成员返回不正确的结果。
还有一篇枚举设计的文章提出了以下几点:
- √DO在简单枚举上提供零值。考虑将值命名为"None."如果这个值不适合这个特定的枚举,那么该枚举最常见的默认值应该被赋值为基础值0。
- X AVOID使用标记枚举值为零,除非该值表示"所有标记都被清除";并按下一指南的规定适当命名。
- √DO将标志枚举的零值命名为
None
。对于标志枚举,该值必须总是表示"所有标志都被清除"。
基于以上,我想说是的,这是一个很好的做法,特别是当你有一个[Flags]
enum
。
框架设计指南建议:
DO在简单枚举上提供0值。
考虑将该值命名为"None"。如果该值不适合此特定枚举,则应将该枚举最常见的默认值赋给基础值0。
的例子:
public enum Compression {
None = 0,
GZip,
Deflate
}
他们还建议不要使用像First和Last这样的时态值,因为它们会让用户感到困惑。
这些只是指导方针,可能会有相互竞争的问题覆盖这些建议,如与现有库或使用模式的兼容性。