【C#】EnumのDescriptionからNameまたはValueを返す
EnumのDescriptionからNameまたはValueを返す
使い所さんはあまりないかも。
調べても出てこない(調べ方が下手)なので作りました。
実装
namespace Sample { enum NumberEnum { [Description("Zero0")] Zero = 0, [Description("One1")] One = 1, [Description("Two2")] Two = 2, [Description("Three3")] Three = 3 } static class EnumNumber { public static NumberEnum GetNumberEnum(string key) { return (NumberEnum)Enum.Parse(typeof(NumberEnum), key); } public static string GetName(this NumberEnum key) { return Enum.GetName(typeof(NumberEnum), key); } public static int GetValue(this NumberEnum key) { return (int)key; } public static string GetEnumDescription(this NumberEnum key) { FieldInfo fi = key.GetType().GetField(key.ToString()); var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); var desciptionString = attributes.Select(n => n.Description).FirstOrDefault(); if (desciptionString != null) { return desciptionString; } return key.ToString(); } public static string GetDescriptionEnumName(string description) { foreach (NumberEnum Value in Enum.GetValues(typeof(NumberEnum))) { if (GetEnumDescription(Value) == description) { return Enum.GetName(typeof(NumberEnum), Value); } } return ""; // 不一致の場合に返す値 } public static int GetDescriptionEnumValue(string description) { foreach (NumberEnum Value in Enum.GetValues(typeof(NumberEnum))) { if (GetEnumDescription(Value) == description) { return (int)Value; } } return 0; // 不一致の場合に返す値 } } }
出力結果
?EnumNumber.GetEnumDescription(NumberEnum.One) "One1" ?EnumNumber.GetDescriptionEnumName("One1") "One" ?EnumNumber.GetDescriptionEnumValue("One1") 1
最後に
関係ないけどはてなブログってpreタグで囲めばコードハイライト使えるしやっぱ良いですね
あとはゴリ押し実装なのでもっといい方法があると思います。