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
如果您的函数知道如何处理枚举的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。