■ サンプル
http://d.hatena.ne.jp/lord_hollow/20110121http://igeta.cocolog-nifty.com/blog/2007/11/enum_string.html
を参考に実用的なenumに関する処理を記述する カスタム属性以外では、拡張メソッドも使っている(.NET3.5以上)http://blogs.yahoo.co.jp/dk521123/22569878.html
以下の関連記事の「数値からEnumに変換」と併せて実装すれば、Enumの処理が綺麗になる感じ。http://blogs.yahoo.co.jp/dk521123/29496843.html
Gender.cs
/// <summary> /// 性別 /// </summary> public enum Gender : byte { [EnumAttribute(0, "不明")] None, [EnumAttribute(1, "男性")] Male, [EnumAttribute(2, "女性")] Female, }
EnumAttribute.cs
/// <summary> /// Enum属性 /// </summary> /// <remarks>使い回し可</remarks> public class EnumAttribute : Attribute { private byte code; private string text; public EnumAttribute(byte code, string text) { this.code = code; this.text = text; } /// <summary> /// コード /// </summary> public byte Code { get { return this.code; } } /// <summary> /// 文言 /// </summary> public string Text { get { return this.text; } } } /// <summary> /// Enum拡張クラス /// </summary> /// <remarks>使い回し可</remarks> public static class EnumExtention { /// <summary> /// 属性で指定された文言を取得する。 /// </summary> /// <param name="value">列挙型</param> /// <returns>文言</returns> public static string ToText(this Enum value) { EnumAttribute attribute = EnumExtention.GetAttribute(value); return attribute.Text; } /// <summary> /// 属性で指定されたコードを取得する。 /// </summary> /// <param name="value">列挙型/param> /// <returns>コード</returns> public static byte ToCode(this Enum value) { EnumAttribute attribute = EnumExtention.GetAttribute(value); return attribute.Code; } private static EnumAttribute GetAttribute(Enum value) { Type enumType = value.GetType(); string name = Enum.GetName(enumType, value); EnumAttribute[] attributes = (EnumAttribute[])enumType.GetField(name) .GetCustomAttributes(typeof(EnumAttribute), 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; } this.label1.Text = sex.ToCode() + sex.ToText(); }
関連記事
属性(アトリビュート) ~定義済み属性~
http://blogs.yahoo.co.jp/dk521123/22779532.html属性(アトリビュート) ~カスタム属性~
http://blogs.yahoo.co.jp/dk521123/29483903.html拡張メソッド
http://blogs.yahoo.co.jp/dk521123/22569878.html列挙型・列挙型・Enum ~ 基本編 ~
http://blogs.yahoo.co.jp/dk521123/22338133.html列挙型・Enum ~ あれこれ編 ~
http://blogs.yahoo.co.jp/dk521123/29496843.html【Java】アノテーション
Java版カスタム属性http://blogs.yahoo.co.jp/dk521123/32740125.html