1

2 つの列挙子と、列挙子を受け取るメソッドがあります。それらは ABC および DEF と呼ばれ、メソッドは TestMethod(Enum myEnum) と呼ばれます。コードは以下のとおりです。

public enum ABC
{
    Zero,
    One,
    Two
};

public enum DEF
{
    Zero,
    One,
    Two
};

public void TestEnum(Enum myEnum)
{
    ...
}

関数 TestEnum は任意の列挙子を取ります。渡されたパラメーターが 2 つのうちのどちらに属しているかをテストするにはどうすればよいですか? try / catch キャストでやみくもにテストを開始できますが、それは醜いです。これを行うよりクリーンな方法はありますか?よろしくお願いします。

4

2 に答える 2

6

渡されたパラメーターが 2 つのうちのどちらに属しているかをテストするにはどうすればよいですか?

あなたはただ呼び出すことができますGetType

Type type = myEnum.GetType();

その後、何をしたいのかは明確ではありません。

または:

if (myEnum is ABC)
{
}
else if (myEnum is DEF)
{
}

編集:メソッドのシグネチャを変更でき呼び出し元が型を知っている場合は、Jeppe のコメントに従って、次を使用できます。

public void TestEnum<T>(T value) where T : struct
{
    // Use typeof(T) here
}

T通常の C# では enum 型に制約することはできません...ただし、後処理によってそのような制約が適用されたコードを書くハックな方法があります。

于 2012-11-27T21:02:05.293 に答える
1

スキート氏はすでにこれを釘付けにしていますが!

2つの方法はどうですか。

public void TestEnum(ABC abcEnum) {
    //do ABC stuff
}

public void TestEnum(DEF defEnum) {
    //do DEF stuff
}

必要な分岐が得られますが、if ステートメントを正しく取得することを心配する必要はありません。確かにこれは if ステートメントにすぎませんが、enum GHI を追加するとどうなるでしょうか。現在、TestEnum が処理する入力について、説明されていないものがあります。オーバーロードされたメソッドを使用すると、コンパイル中にそれをキャッチできます (または、インテリセンスでキャッチできます)。

于 2012-11-27T21:37:51.323 に答える