【C#】列挙型・Enum ~ 数値からEnumに変換 ~

■ 数値からEnumに変換

http://snoopywzr.blogspot.jp/2009/10/c-enum.html
http://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);
   
    // 以下、略
}