【C#】enumのDescription属性の設定方法と設定値の取得方法

C#において区分値の意味でよく使う「enum」にはDescription属性を付与しておくと便利です。まずはDescription属性について簡単に復習しておきます。

Description属性とは

DescriptionAttributeクラスに属しプロパティまたはイベントの説明文を指定できる機能です。この機能によりenumの各要素に説明を加えることができる。追加した情報はVisualStudioのインテリセンス機能に反映されるうえ、コードの可読性も向上するというメリットを得ることができます。

[System.AttributeUsage(System.AttributeTargets.All)]
public class DescriptionAttribute : Attribute

Description属性の設定方法

enum値の各値に以下のように属性を付与します。

using System; 
using System.ComponentModel; 
namespace Sample 
{ 
    //enumを定義 
    public enum sampleEnum 
    { 
        [Description("ほげ")] 
        hoge, 
        [Description("ふが")] 
        fuga, 
    } 
}

定義の上に記述されている「Description」の部分が属性(= Attribute)になります。Attributeはクラスやメンバーに追加情報を与えられる機能であり、ここでは「Description = 概要・説明」機能を与えていることになります。

Description属性の取得方法

プロパティに設定したDescription属性を取得するには以下のようにします。

public static string GetDescription(object value) 
{ 
    string description = null; 
     
    FieldInfo fieldInfo = value.GetType().GetField(value.ToString()); 
    Attribute attr = Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute)); 
    if (attr != null) 
    { 
        DescriptionAttribute descAttr = (DescriptionAttribute) attr; 
        description = descAttr.Description; 
    } 
    return description; 
}

上記のような共通メソッドを用意しておくことで、渡した値のDescription属性を取得してくれるようになりますので、後は以下のように使用したいenumのデータを投げておけばOKです。

static void Main(string[] args) 
{ 
    var description = GetDescription(sampleEnum.hoge); 
    Console.WriteLine(description); 
    Console.ReadLine(); 
}