代码之家  ›  专栏  ›  技术社区  ›  Lews Therin

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

  •  0
  • Lews Therin  · 技术社区  · 6 年前

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

    举个例子 枚举 具有 说明 属性:

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

    最后介绍了扩展方法的用法:

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

    我的问题是, 枚举 S,是 if (memberInfo.Length < 1) 是否需要检查?返回的数组是否来自 GetMember() 永远都是空的 枚举 ?我知道你可以申报空的 枚举 这样地:

    public enum Colors
    {
    }
    

    但我不知道您是否可以创建类型为的变量 Colors 那么……

    var green = Colors. // What goes here?
    

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   Alessandro D'Andria    6 年前

    Colors

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