■ 数値からEnumに変換
http://snoopywzr.blogspot.jp/2009/10/c-enum.htmlhttp://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_016/cs2_016_04.html
を参考に「Enum.Parse()」「Enum.IsDefined()」を使用して作成する 以下の関連記事の「属性(アトリビュート) ~カスタム属性~」のサンプルと併せて実装すれば、Enumの処理が綺麗になる感じ。https://blogs.yahoo.co.jp/dk521123/29483903.html
■ サンプル
Gender.cs
/// <summary> /// 性別 /// </summary> public enum Gender : byte { [LabeledEnum("Unknown", "N")] None, [LabeledEnum("日次")] Male, Female, } /// <summary> /// 性別用拡張クラス /// </summary> public class GenderExtention { public static Gender ToEnum(object value) { if(value == null || DBNull.Value.Equals(value)) { return Gender.None; } byte code; if (!Byte.TryParse(value.ToString(), out code)) { return Gender.None; } var codeValue = EnumExtention.ToEnum(code, typeof(Gender)); if (codeValue == null) { return Gender.None; } return (Gender)codeValue; } }
EnumExtention.cs
/// <summary> /// Enum拡張クラス /// </summary> /// <remarks>使い回し可</remarks> public static class EnumExtention { /// <summary> /// 属性で指定されたコードを取得する。 /// </summary> /// <param name="value">ラベル付きフィールド</param> /// <returns>コード</returns> public static object ToEnum(object value, Type enumType) { object returnValue = null; if (Enum.IsDefined(enumType, value)) { returnValue = Enum.Parse(enumType, value.ToString()); } return returnValue; } }
使い方の例
private void button1_Click(object sender, EventArgs e) { var sex = GenderExtention.ToEnum(this.textBox1.Text); // 以下、略 }