20

標準の c# 列挙型をパラメーターとして渡すことはできますか?

例えば:

enum e1
{
    //...
}

enum e2
{
    //...
}

public void test()
{
    myFunc( e1 );
    myFunc( e2 );
}

public void myFunc( Enum e )
{
    // Iterate through all the values in e
}

これを行うことで、特定の列挙内のすべての名前を取得したいと考えています。反復コードはどのようになりますか?

4

7 に答える 7

30

これ!

        public void Foo(Enum e)
        {
            var names = Enum.GetNames(e.GetType());

            foreach (var name in names)
            {
                // do something!
            }
        }   

編集:悪い、あなたiterateと言った。

注: foreach ステートメントで GetNames() 呼び出しを実行できることはわかっていますが、デバッグに便利なので、最初にそのタイプのものをメソッド呼び出しに割り当てることを好みます。

于 2009-01-29T15:44:29.240 に答える
3

次の例のように、 を にenum直接渡そうとすると問題が発生します。myFunc

enum e1 {something, other};
myFunc(e1);  // Syntax error: "e1 is a type, but is being used like a variable"
于 2012-11-07T18:23:02.623 に答える
3

Enum.GetNames( typeof(e) ) メソッドを使用すると、名前を含む文字列の配列が返されます。

Enum.GetValues を使用して対応する値を取得することもできます。

編集 -Whoops - パラメータを Enum として渡す場合、実際の Enum 型名としてパラメータを渡した場合に使用する typeof() の代わりに e.GetType() を使用する必要があります。

于 2009-01-29T15:43:23.313 に答える
3

Enum.GetNames のようなものですか?

于 2009-01-29T15:43:45.857 に答える
3

Enum.GetValues Enum.GetNames

だから何か...

foreach(e1 value in Enum.GetValues(typeof(e1)))
于 2009-01-29T15:44:39.163 に答える
2

このような:

    public void myFunc(Enum e)
    {
        foreach (var name in Enum.GetNames(typeof(e)))
        {
            Console.WriteLine(name);
        }
    }
于 2009-01-29T15:46:04.823 に答える
1

正しいです:

public void myFunc(Enum e)
{
    foreach (var name in Enum.GetNames(e.GetTye()))
    {
        Console.WriteLine(name);
    }
}
于 2009-06-19T12:51:20.557 に答える