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