[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);
}