我有值枚举,我将枚举设置为Nullable,这是因为我不想添加MyEnum.NotAvilable状态。当我将此枚举作为参数发送到函数时,我的问题就开始了,它将显示消息:
"The best overloaded method .."
我想这是因为枚举可以为空。唯一可行的是,如果将枚举发送到函数,我将枚举转换为MyEnum或更改foo的签名以接受MyEnum?而不是MyEnum。
枚举定义为:
public MyEnum? Test
使用签名调用函数:private void Foo(MyEnum value)
Foo(MyEnum value); // not working
Foo(MyEnum? value); // works
我的问题是 - 在将它发送给Foo之前投射到MyEnum是不好的做法?
if (value.HasValue)
Foo((MyEnum) value); //this makes Foo(MyEnum value) valid
答案 0 :(得分:5)
如果您的函数知道如何处理枚举的null
值,请发送MyEnum?
。如果没有,您有两个选择 - 如果您的值为null,则不发送给方法,或者发送默认值。
if (value.HasValue)
Foo(value.Value);
//or, send a default (null coalescing operator)
Foo(value ?? MyEnum.SomeValue);
答案 1 :(得分:3)
对于Nullable<T>
,您有HasValue
属性和Value
属性。你的演员阵容是有效的,但这也会有效(对我来说看起来更好):
if (value.HasValue)
{
Foo(value.Value);
}
答案 2 :(得分:3)
您应该通过value.Value
而不是投射它。 Nullable类型具有Value
- 属性,其中包含实际值 - 如果它不为null。当值为null并且您尝试访问此属性时,您将获得异常。