枚舉:Enum-Int-String之間的轉換與擴展

示例枚舉:

    public enum Color
    {
        [Description("紅色")]
        Red,

        [Description("綠色")]
        Green = 7,

        [Description("藍色")]
        Blue
    }
Enum轉Int
int red = (int)Color.Red;//0
int green = (int)Color.Green;//7
int blue = (int)Color.Blue;//8
  • 枚舉類型默認為Int
  • 枚舉值默認從0開始,並依次遞增
Int轉Enum
 Color a = (Color)5;//不報錯
 Color b = (Color)7;
 
 Console.WriteLine(a.ToString());//5
 Console.WriteLine(b.ToString());//Green
  • Int 可以直接轉 Enum
  • 枚舉可能會得到非預期的值(值沒有對應的成員),不會報錯
Enum轉String
var red = Color.Red.ToString();//Red
var green = Color.Green.ToString();//Green
var blue = Color.Blue.ToString();//Blue
String轉Enum
var green = Enum.Parse(typeof(Color), "Green");//Color.Green
var black = Enum.Parse(typeof(Color), "Black");//throw ArgumentException
Enum.TryParse<Color>("Black", out var blackTry);//Color.Red
  • 和枚舉名相同的字符可以轉成相對應的枚舉(區分大小寫)
  • 轉化不存在的字符,會拋出異常(不同於Int)
  • 使用Enum.TryParse轉換,不存在,則返回默認枚舉
  • 枚舉的默認值 0,即使沒有為0的成員
讀取Description

當我需要展示枚舉 Int 和 枚舉名以外的信息時,可以使用 DescriptionAttribute 屬性,設置描述信息然後讀取

    /// <summary>
    /// 獲取枚舉的描述
    /// </summary>
    /// <param name="enum">枚舉值</param>
    /// <returns>description</returns>
    public static string ToDescription(this Enum @enum)
    {
        MemberInfo[] member = @enum.GetType().GetMember(@enum.ToString());
        if (member.Length != 0)
        {
            string description = GetDescription(member[0]);
            if (description != null)
            {
                return description;
            }
        }
        return @enum.ToString();
    }
    
    /// <summary>
    /// 獲取成員信息的 Description
    /// </summary>
    /// <param name="memberInfo">成員信息</param>
    /// <returns>Description</returns>
    private static string GetDescription(MemberInfo memberInfo)
    {
        var type = typeof(DescriptionAttribute);
        var attribute = memberInfo.GetCustomAttribute(type) as DescriptionAttribute;
        return attribute?.Description;
    }
var red = Color.Red.ToDescription();//紅色
var green = Color.Green.ToDescription();//綠色
var blue = Color.Blue.ToDescription();//藍色
枚舉的擴展方法

示例代碼://gitee.com/sayook/Extensions/blob/master/Extensions/EnumExtensions.cs

相關好文://mp.weixin.qq.com/s/f9Wc3kIKF4K1zHkHuHyp3w