C# 枚举高级用法之Description

发布时间 2023-10-26 10:24:44作者: 时而有风

在主函数中:

public enum DB
{
    [Description("读")]write = 1,
    [Description("写")]read  = 2,
}

private static void Main(string[] args)
{
    //第一种方法
    Console.WriteLine(DB.write.ToDescription());
    Console.WriteLine(DB.read.ToDescription() + "\n");
    //第二种方法
    Console.WriteLine(DB.write.GetDescription());
    Console.WriteLine(DB.read.GetDescription());

    Console.ReadKey();
}

 新创一个类文件MyException.cs:

public static class MyException
{
    /// <summary>
    /// 获取枚举类型的描述
    /// </summary>
    /// <param name = "enumeration"> </param>
    /// <returns> </returns>
    public static string ToDescription(this Enum enumeration)
    {
        var type    = enumeration.GetType();
        var memInfo = type.GetMember(enumeration.ToString());
        if (null != memInfo && memInfo.Length > 0)
        {
            var attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (null != attrs && attrs.Length > 0)
            {
                return ((DescriptionAttribute) attrs[0]).Description;
            }
        }

        return enumeration.ToString();
    }

    /// <summary>
    /// 获取枚举类型的描述
    /// </summary>
    /// <param name = "val"> </param>
    /// <returns> </returns>
    public static string GetDescription(this Enum val)
    {
        var field           = val.GetType().GetField(val.ToString());
        var customAttribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));
        return customAttribute == null ? val.ToString() : ((DescriptionAttribute) customAttribute).Description;
    }
}

 结果: