3

私は単純なローグライク ゲームを作成して、C# をもう少しよく学ぼうとしています。Enum を引数として指定できる一般的なメソッドを作成しようとしています。その Enum にある要素の数を int として返します。メソッドを呼び出すいくつかの異なるクラスがあるため、できるだけ一般的なものにする必要があります。

私は過去1時間ほど検索しましたが、ここまたは他の方法で私の質問に完全に答えたリソースを見つけることができませんでした...私はまだC#の初心者から中級者の段階にあるので、まだすべてを学んでいます物事の構文ですが、これまでのところ私が持っているものは次のとおりです。

// Type of element
public enum ELEMENT
{
    FIRE, WATER, AIR, EARTH
}


// Counts how many different members exist in the enum type
public int countElements(Enum e)
{
    return Enum.GetNames(e.GetType()).Length;
}


// Call above function
public void foo()
{
    int num = countElements(ELEMENT);
}

「引数 1: 'System.Type' から 'System.Enum' に変換できません」というエラーでコンパイルされます。うまくいかない理由はなんとなくわかりますが、すべてを正しく設定するための指示が必要です。

ありがとう!

PS: 実行時に列挙型の内容を変更することは可能ですか? プログラムの実行中?

4

2 に答える 2

7

これを試して:

public int countElements(Type type)
{
    if (!type.IsEnum)
        throw new InvalidOperationException();

    return Enum.GetNames(type).Length;
}

public void foo()
{
    int num = countElements(typeof(ELEMENT));
}
于 2012-04-05T00:44:36.790 に答える
3

一般的な方法でこれを行うこともできます。個人的には、この方法の構文の方が好きfoo()です。指定する必要がないからです。typeof()

    // Counts how many different members exist in the enum type
    public int countElements<T>()
    {
        if(!typeof(T).IsEnum)
            throw new InvalidOperationException("T must be an Enum");
        return Enum.GetNames(typeof(T)).Length;
    }

    // Call above function
    public void foo()
    {
        int num = countElements<ELEMENT>();
    }
于 2012-04-05T00:53:09.157 に答える