C#发送Nullable枚举作为参数

时间:2013-06-10 07:45:44

标签: c# nullable

我有值枚举,我将枚举设置为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 

3 个答案:

答案 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并且您尝试访问此属性时,您将获得异常。