C# 使用EnumType.None或Nullable<;枚举类型>;?
枚举通常用于定义类的特定属性的状态,例如在某种类型的对象模型中。对于其中一些属性,“此属性未设置”状态有效 在这些情况下,我应该使用零C# 使用EnumType.None或Nullable<;枚举类型>;?,c#,enums,nullable,object-model,C#,Enums,Nullable,Object Model,枚举通常用于定义类的特定属性的状态,例如在某种类型的对象模型中。对于其中一些属性,“此属性未设置”状态有效 在这些情况下,我应该使用零Noneenum值,还是将属性类型设置为null public MyEnum Property { get; set; } public enum MyEnum { None = 0, Value1, Value2 } 或 使用MyEnum.None-它更具表达力,甚至可以使用MyEnum.Invalid来表达意思 也可以将其设置为0以
None
enum值,还是将属性类型设置为null
public MyEnum Property { get; set; }
public enum MyEnum {
None = 0,
Value1,
Value2
}
或
使用
MyEnum.None
-它更具表达力,甚至可以使用MyEnum.Invalid
来表达意思
也可以将其设置为0以外的其他值-因为它基于int,所以可以将其设置为-1,将第一个有效值设置为1:
public enum MyEnum {
InvalidValue = -1,
Value1 = 1,
Value2
}
在代码中,您可以轻松地检查传入的该值,并引发描述性异常
不需要可为Null的枚举类型,且该类型的表现力较低。它要求代码的用户意识到这一点并检查是否为空。使用
MyEnum.None
-它更具表现力,甚至MyEnum.Invalid
来传达含义
也可以将其设置为0以外的其他值-因为它基于int,所以可以将其设置为-1,将第一个有效值设置为1:
public enum MyEnum {
InvalidValue = -1,
Value1 = 1,
Value2
}
在代码中,您可以轻松地检查传入的该值,并引发描述性异常
不需要可为Null的枚举类型,且该类型的表现力较低。它要求您的代码用户意识到这一点并检查是否为空。很难得出结论,您的应用程序中有很多因素会影响这一点。我倾向于将枚举值定义为0,但不在枚举中指定零值
enum Foo
{
A = 1,
B = 2
}
...
Foo myFoo = (Foo)0;
这提供了sentinel值的好处,而不会污染枚举。很难得出结论,应用程序中的许多因素都会影响这一点。我倾向于将枚举值定义为0,但不在枚举中指定零值
enum Foo
{
A = 1,
B = 2
}
...
Foo myFoo = (Foo)0;
这提供了sentinel值的好处,而不会污染枚举。我将使用“None”值而不是可为空的枚举。如果没有其他内容,对我来说,
If(Property==MyEnum.None)
比If(Property==null)
可读性好得多我会使用“None”值而不是可为空的枚举。如果没有其他内容,对我来说,If(Property==MyEnum.None)
比If(Property==null)
可读性好得多,另一个选项是将第一个值设置为1,因为它最初是0
enum Foo
{
A = 1,
B = 2
}
...
Foo myFoo = (Foo)0;
public enum MyEnum {
Value1 = 1,
Value2
}
我认为你的两种情况都可以接受!这将取决于你的情况。使用用户界面时,第一个带有“None”值的示例可能会更容易使用。但是,Nullable提供了有关如何使用变量的更多信息。另一个选项是将第一个值设置为1,因为它的初始值为0
public enum MyEnum {
Value1 = 1,
Value2
}
我认为你的两种情况都可以接受!这将取决于你的情况。使用用户界面时,第一个带有“None”值的示例可能会更容易使用。但是,Nullable提供了有关如何使用变量的更多信息