看看此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
扩展方法。
答案 0 :(得分:3)
即使未定义任何值,也可以创建类型为Colors
的变量:
public enum Colors { }
var color2 = (Colors)100; // with casting
Colors color2 = default; // default value '0'