我正在尝试为可为空枚举编写扩展方法。
比如这个例子:

// 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?,那么在方法中会得到一个nullEnum。)

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

09-28 12:33