c#发送空枚举作为参数

本文关键字:参数 枚举 | 更新日期: 2023-09-27 18:17:34

我有带值的enum,我将该enum设置为可空的,这是因为我不想添加MyEnum。NotAvilable状态。当我将这个enum作为参数发送给函数时,我的问题开始了,它将显示消息:

"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 

c#发送空枚举作为参数

如果您的函数知道如何处理枚举的null值,则发送MyEnum?。如果没有,你有两种选择——如果你的值为null,就不发送给这个方法,或者发送一个默认值。

if (value.HasValue)
    Foo(value.Value);
//or, send a default (null coalescing operator)
Foo(value ?? MyEnum.SomeValue);

对于Nullable<T>,您有一个HasValue属性和一个Value属性。你的cast是有效的,但这也可以工作(对我来说看起来更好):

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

你应该传递value.Value而不是强制转换它。nulable类型有一个包含实际值的Value属性,以防它不是null。