如果我有一个enum
成员的类,我希望能够代表没有定义该成员的情况,哪个更好?
a)使用可空类型将该成员声明为类中可为空的.例如:
public SomeEnum? myEnum;
Run Code Online (Sandbox Code Playgroud)
b)在枚举中添加默认的"未知"值.例如:
public enum SomeEnum {
Unknown,
SomeValueA,
SomeValueB,
SomeValueC,
}
Run Code Online (Sandbox Code Playgroud)
无论如何,我都无法看到任何重大利弊; 但也许一个优于另一个?
Jon*_*eet 62
绝对使用可以为空的值类型 - 这就是它们的用途.它明确说明了你的意图.这也意味着您可以使用Enum.IsDefined
(或者如果您想要通用类型安全,可以使用Unconstrained Melody中的等效物)来轻松确定特定值是否为实际值而不必担心"假"值.
小智 19
我同意archimed7592,缺席值和"未知"值之间存在真正的差异.
例:
"你的血型是什么?"
Null =缺席值 - >问题未得到回答 - >提出问题
"未知" - >患者表示他不知道 - >为血型进行实验室测试
您只需要决定是否需要一个值来表示未知值,或者您需要一种方法来表示没有任何值.
在需要表示未知值的情况下,额外的枚举成员听起来很好作为解决方案.
如果需要表示没有任何值,请将其置为可空.
请记住,让"未知"的枚举成员和枚举本身同时可以为空,这没有任何问题.
HTH.
这取决于!
比尔瓦格纳列出了一些很好的理由来添加一个Undefined, enum
当它有意义时.我建议你找到完整的项目,但这是一个预览:
第8项:确保0是值类型的有效状态
默认的.NET系统初始化将所有对象设置为全0.您无法阻止其他程序员创建初始化为全0的值类型的实例.将其设为您的类型的默认值.
一个特例是枚举.永远不要创建不包含0作为有效选择的枚举.所有枚举都派生自System.ValueType.枚举的值从0开始,但您可以修改该行为......
现在,我有一种情况,用户需要从ComboBox中选择某种类型,或者他们没有选择任何类型.我使用带有[Description("a description")]
属性的枚举作为要选择的对象.如果没有/ Unknown是枚举的自然选择,那么我会用它来表示没有选择任何东西.否则,我会用一个Nullable<MyEnum>
.