C#发送Nullable枚举作为参数

ila*_*sch 3 c# nullable

我有值枚举,我将枚举设置为Nullable,这是因为我不想添加MyEnum.NotAvilable状态.当我将此枚举作为参数发送到函数时,我的问题就开始了,它将显示消息:

"The best overloaded method .."  
Run Code Online (Sandbox Code Playgroud)

我想这是因为枚举可以为空.唯一可行的是,如果将枚举发送到函数,我将枚举转换为MyEnum或更改foo的签名以接受MyEnum?而不是MyEnum.

枚举定义如下:

public MyEnum? Test
Run Code Online (Sandbox Code Playgroud)

使用签名调用函数:private void Foo(MyEnum value)

Foo(MyEnum value); // not working
Foo(MyEnum? value); // works  
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 在将它发送给Foo之前​​投射到MyEnum是不好的做法?

if (value.HasValue)
    Foo((MyEnum) value); //this makes Foo(MyEnum value) valid 
Run Code Online (Sandbox Code Playgroud)

sq3*_*33G 5

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

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

//or, send a default (null coalescing operator)
Foo(value ?? MyEnum.SomeValue);
Run Code Online (Sandbox Code Playgroud)