GetMember() 可以 return 枚举的空数组吗?
Could GetMember() ever return an empty array for an enum?
看看这个 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)
检查是否必要?对于 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'
看看这个 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)
检查是否必要?对于 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'