enum+中文



from http://gacken.com/blog/program/csharp-308_20180710/


DescriptionAttribute属性を使用することで、enum値に文字列情報を紐付けることができます。
まず、enumの各定義値にDescription属性を付加し、紐付ける文字列を設定しておきます。
1
2
3
4
5
6
7
8
9
10
11
enum HogeSize
{
    [Description("しょう")]
    Small,
    [Description("ちゅう")]
    Middle,
    [Description("だい")]
    Large,
}

そして、引数で渡されたenum値に紐付けられた文字列を取得するメソッドを実装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/// <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;
}

こんな感じで使います。
1
2
3
4
5
6
7
8
9
10
11
12
13
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);
}







留言

熱門文章