可以为空的枚举的扩展方法

gdo*_*ica 10 .net c# compiler-construction enums nullable

我正在尝试为可空的枚举编写一个Extension方法.
与此示例一样:

// ItemType is an enum
ItemType? item;
...

item.GetDescription();
Run Code Online (Sandbox Code Playgroud)

所以我写了这个方法,由于某些我不理解的原因而无法编译:

public static string GetDescription(this Enum? theEnum)
{
    if (theEnum == null)
        return string.Empty;

    return GetDescriptionAttribute(theEnum);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误Enum?:

只有非可空值类型才能成为system.nullable的基础

为什么?Enum无法拥有这个价值null!

更新:

如果有很多枚举,ItemType只是其中之一的一个例子.

Raw*_*ing 18

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
Run Code Online (Sandbox Code Playgroud)

  • @Chris [从任何`enum`类型到`System.Enum`存在拳击转换](http://msdn.microsoft.com/en-us/library/aa664600.aspx) (2认同)