枚举通常用于定义类的特定属性的状态,比如在某种对象模型中。对于其中一些属性,状态'此属性未设置'有效。
在这些情况下,我应该使用零None
枚举值,还是将属性类型设为可为空?
public MyEnum Property { get; set; }
public enum MyEnum {
None = 0,
Value1,
Value2
}
或
public MyEnum? Property { get; set; }
public enum MyEnum {
Value1,
Value2
}
答案 0 :(得分:6)
使用MyEnum.None
- 表达意义更具表现力,甚至MyEnum.Invalid
。
您也可以将其设置为0以外的其他值 - 因为它基于int,您可以将其设置为-1,将第一个有效值设置为1:
public enum MyEnum {
InvalidValue = -1,
Value1 = 1,
Value2
}
在您的代码中,您可以轻松检查传入的值并引发描述性异常。
可预期的可枚举枚举类型不具有表现力。它要求您的代码用户知道这一点并检查空值。
答案 1 :(得分:0)
很难最终回答这个问题,您的应用中的很多因素都会影响到这一点。我倾向于将枚举值定义为0,但不在枚举中指定零值。
enum Foo
{
A = 1,
B = 2
}
...
Foo myFoo = (Foo)0;
这样可以获得标记值的好处,而不会污染枚举。
答案 2 :(得分:0)
我会使用“None”值而不是可以为空的枚举。如果不出意外,对我来说if(Property == MyEnum.None)
比if(Property == null)
更具可读性。
答案 3 :(得分:0)
另一种选择是将第一个值设置为1,因为它最初为0。
public enum MyEnum {
Value1 = 1,
Value2
}
我认为你的两种情况都是可以接受的!这取决于你的情况。使用用户界面时,第一个带有“无”值的示例将 probbaly 更易于使用。但是,Nullable提供了有关如何使用变量的更多信息。