3

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

3 回答 3

5

如果您的函数知道如何null处理您的枚举值,请发送MyEnum?。如果不是,您有两个选择 - 如果您的值为 null,则根本不发送到该方法,或者改为发送默认值。

if (value.HasValue)
    Foo(value.Value);

//or, send a default (null coalescing operator)
Foo(value ?? MyEnum.SomeValue);
于 2013-06-10T07:59:09.387 回答
3

对于 a Nullable<T>,您有一个HasValue属性和一个Value属性。您的演员表是有效的,但这也可以(而且对我来说看起来更好):

if (value.HasValue)
{
    Foo(value.Value);
}
于 2013-06-10T07:48:09.713 回答
3

而不是铸造它,你应该通过value.Value. Nullable-type 有一个Value包含实际值的属性——以防它不为空。当值为 null 并且您尝试访问此属性时,您将获得异常。

于 2013-06-10T07:48:32.857 回答