使用EnumType.None或Nullable <EnumType>?

the*_*oop 0 c# enums nullable object-model

枚举通常用于定义类的特定属性的状态,比如在某种对象模型中.对于其中一些属性,状态'此属性未设置'是有效的.

在这些情况下,我应该使用零None枚举值,还是使属性类型可以为空?

public MyEnum Property { get; set; }

public enum MyEnum {
    None = 0,
    Value1,
    Value2
}
Run Code Online (Sandbox Code Playgroud)

要么

public MyEnum? Property { get; set; }

public enum MyEnum {
    Value1,
    Value2
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 6

使用MyEnum.None- 它更具表现力,甚至MyEnum.Invalid传达意义.

您还可以将其设置为0以外的其他值 - 因为它基于int,您可以将其设置为-1,将第一个有效值设置为1:

public enum MyEnum {
    InvalidValue = -1,
    Value1 = 1,
    Value2
}
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您可以轻松检查传入的值并引发描述性异常.

可预期的枚举类型不是预期的,也不那么具有表现力.它要求您的代码用户知道这一点并检查空值.