■ サンプル
Gender.cs
/// <summary>
/// 性別
/// </summary>
public enum Gender
{
[EnumTextAttribute("Unknown", "N")] // 独自でアトリビュートを作成(下記参照)
None,
[EnumTextAttribute("Male", "M")]
Male,
[EnumTextAttribute("Female", "F")]
Female,
}
EnumTextAttribute.cs
/// <summary>
/// Enum属性
/// </summary>
/// <remarks>使い回し可</remarks>
public class EnumTextAttribute : Attribute
{
private string[] texts;
public EnumTextAttribute(params string[] texts)
{
this.texts = texts;
}
/// <summary>
/// 文言リスト
/// </summary>
public string[] Texts
{
get
{
return this.texts;
}
}
}
EnumHelper.cs
/// <summary>
/// Enumヘルパークラス
/// </summary>
/// <remarks>使い回し可</remarks>
public static class EnumHelper
{
/// <summary>
/// 属性で指定された文言を取得する。
/// </summary>
/// <param name="value">列挙型</param>
/// <returns>文言</returns>
public static string ToText(this Enum value)
{
return EnumHelper.ToText(value, 0);
}
/// <summary>
/// 属性で指定された文言を取得する。
/// </summary>
/// <param name="value">列挙型</param>
/// <param name="index">インデックス番号</param>
/// <returns>文言</returns>
public static string ToText(this Enum value, int index)
{
EnumTextAttribute attribute = EnumHelper.GetEnumTextAttribute(value);
return attribute.Texts[index];
}
/// <summary>
/// 属性で指定されたEnum属性クラスを取得する。
/// </summary>
/// <param name="value">列挙型</param>
/// <returns>Enum属性</returns>
private static EnumTextAttribute GetEnumTextAttribute(Enum value)
{
Type enumType = value.GetType();
string name = Enum.GetName(enumType, value);
EnumTextAttribute[] attributes =
(EnumTextAttribute[])enumType.GetField(name)
.GetCustomAttributes(typeof(EnumTextAttribute), false);
return attributes.FirstOrDefault();
}
}
使い方の例
private void button1_Click(object sender, EventArgs e)
{
Gender sex;
switch (this.textBox1.Text)
{
case "1":
sex = Gender.Male;
break;
case "2":
sex = Gender.Female;
break;
default:
sex = Gender.None;
break;
}
int index;
if (int.TryParse(this.textBox2.Text, out index))
{
this.label1.Text = sex.ToText(index);
}
else
{
this.label1.Text = sex.ToText();
}
}