GetMember()是否会为枚举返回一个空数组



看看这个用于获取Description属性的enum扩展方法:

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();
}

以及一个具有Description属性的示例enum

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)检查是否必要?对于enum,从GetMember()返回的数组是否为空?我知道你可以这样声明一个空的enum

public enum Colors
{
}

但我不知道你是否可以创建一个类型为Colors的变量,那么。。。

var green = Colors. // What goes here?

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

即使没有定义值,也可以创建Colors类型的变量:

public enum Colors { }
var color2 = (Colors)100; // with casting
Colors color2 = default; // default value '0'

最新更新