[C#] enum値に文字列情報を紐付ける方法
DescriptionAttribute属性を使用することで、enum値に文字列情報を紐付けることができます。
まず、enumの各定義値にDescription属性を付加し、紐付ける文字列を設定しておきます。
enum HogeSize { [Description("しょう")] Small, [Description("ちゅう")] Middle, [Description("だい")] Large, }
そして、引数で渡されたenum値に紐付けられた文字列を取得するメソッドを実装。
/// <summary> /// 列挙体フィールドのDescriptionを取得する。 /// </summary> /// <param name="value">列挙体値</param> /// <returns>Description文字列</returns> public static string GetEnumDescription(object value) { string description = null; try { if (value != null) { string strValue = value.ToString(); if (0 < strValue.Length) { FieldInfo fi = value.GetType().GetField(strValue); Attribute attr = Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute)); if (attr != null) { DescriptionAttribute descAttr = (DescriptionAttribute)attr; description = descAttr.Description; } } } } catch { description = value.ToString(); } return description; }
こんな感じで使います。
public void Main() { string strVal; strVal = GetEnumDescription(HogeSize.Small); Console.WriteLine(strVal); strVal = GetEnumDescription(HogeSize.Middle); Console.WriteLine(strVal); strVal = GetEnumDescription(HogeSize.Large); Console.WriteLine(strVal); }