tonari note

オンラインゲームエンジニアの雑記

Enum.GetValues のお話

定義したEnumの各要素(定数)を配列に変換してくれる便利関数のお話。
MSDN

using System;
 
public class Test
{
    enum Hoge
    {
        Hoge0 = 0,
        Hoge1,
        Hoge100 = 100,
    }
 
    public static void Main()
    {
        var hogeArray = Enum.GetValues(typeof(Hoge));
        foreach (var h in hogeArray)
        {
            Console.WriteLine(string.Format("{0} = {1}", h, (int)h));
        }
    }
}

実行結果

Enum.GetValuesの返り値の型はArrayなんですが、Arrayは.net 2.0以降では実行時に型情報も持つようです。
ただし、表向きから型を扱えるわけではないので、以下のようにキャストすると型情報を持ったシーケンスが取れます。

using System;
using System.Linq; // 追加

///==
        // IEnumerable<Hoge>
        var hogeArray = Enum.GetValues(typeof(Hoge)).Cast<Hoge>();
///==

実行結果