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); } |
留言
張貼留言