GetMember()是否可以为枚举返回空数组?

时间:2018-07-19 14:33:34

标签: c# enums attributes system.componentmodel

看看此enum扩展方法以获取Description属性:

public static string GetDescription(this Enum enumValue)
{
    var memberInfo = enumValue.GetType().GetMember(enumValue.ToString());

    if (memberInfo.Length < 1)
        return null;

    var attributes = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);

    return attributes.Length > 0 ? ((DescriptionAttribute)attributes[0]).Description : enumValue.ToString();
}

还有一个具有enum属性的示例Description

public enum Colors
{
    [Description("Navy Blue")]
    Blue,
    [Description("Lime Green")]
    Green
}

最后是扩展方法的用法:

var blue = Colors.Blue;
Console.WriteLine(blue.GetDescription());
// Console output: Navy Blue

我的问题是,当涉及enum时,是否需要进行if (memberInfo.Length < 1)检查?从GetMember()返回的数组对于enum是否为空?我知道您可以这样声明一个空的enum

public enum Colors
{
}

但是我不知道您是否还能创建类型Colors的变量……

var green = Colors. // What goes here?

我想删除if (memberInfo.Length < 1)检查,但是如果以后会引起问题,我不想这样做(我想不出我需要空{{1的原因}},但其他开发人员可能会使用enum扩展方法。

1 个答案:

答案 0 :(得分:3)

即使未定义任何值,也可以创建类型为Colors的变量:

public enum Colors { }

var color2 = (Colors)100; // with casting
Colors color2 = default; // default value '0'