mizuneko
4/4/2014 - 3:54 PM

EnumHelper.cs

[enum汎用ヘルパクラス]

// enum定義
enum Gender { Unknown, Male, Female };

// ジェネリックを利用した汎用ヘルパクラス
static class EnumUtil<T>
{
    // 整数値が enum で定義済みかどうか?
    public static bool IsDefined(int n)
    {
        return Enum.IsDefined(typeof(T), n);
    }

    // Foreach用のGetEnumeratorを持つヘルパクラス
    public class EnumerateEnum
    {
        public IEnumerator<T> GetEnumerator()
        {
            foreach (T e in Enum.GetValues(typeof(T)))
                yield return e;
        }
    }

    // enum定義をforeachに渡すためのヘルパクラスを返す
    public static EnumerateEnum Enumerate()
    {
        return new EnumerateEnum();
    }
}

class Program
{
    static void Main(string[] args)
    {
        // enumを文字列に変換する。
        Console.WriteLine("{0} => {1}", Gender.Unknown, Gender.Unknown.DisplayName());

        // 整数値がenumの値として定義済みかチェックする
        int n = 1;
        if (GenderExt.IsDefined(n))
            Console.WriteLine("整数値:{0}は{1}として定義されています。", n, ((Gender)n).ToString());
        else
            Console.WriteLine("整数値:{0}は未定義です。", n);

        // 定義済みのenumを列挙する
        foreach (var gender in GenderExt.Enumerate())
        {
            Console.WriteLine("{0}:{1}", gender.DisplayName(), (int)gender);
        }
    }
}