我正在尝试为可为空枚举编写扩展方法。
比如这个例子:
// ItemType is an enum
ItemType? item;
...
item.GetDescription();
所以我写了一个不编译的方法,因为我不明白的原因:
public static string GetDescription(this Enum? theEnum)
{
if (theEnum == null)
return string.Empty;
return GetDescriptionAttribute(theEnum);
}
我在
Enum?
上得到以下错误:只有不可为空的值类型可以是System.Nullable的基础
为什么?枚举不能有价值
null
!更新:
如果有很多枚举,
ItemType
只是其中一个例子。 最佳答案
System.Enum
是一个class
,所以只要去掉?
就可以了。
(我的意思是,如果传入一个空值ItemType?
,那么在方法中会得到一个null
Enum
。)
public static string GetDescription(this Enum theEnum)
{
if (theEnum == null)
return string.Empty;
return GetDescriptionAttribute(theEnum);
}
enum Test { blah }
Test? q = null;
q.GetDescription(); // => theEnum parameter is null
q = Test.blah;
q.GetDescription(); // => theEnum parameter is Test.blah