1

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

public enum ABC
{
    Zero = 0,
    One = 1,
    Two = 2
};

public enum DEF
{
    Three = 3,
    Four = 4,
    Five = 5
};

public int TestEnum(Enum myEnum)
{
    int returnValue = ??? // How do I get the value out of this enum that can be either ABC or DEF?
    bool randomTestBool = returnValue > 3;
    return returnValue
}

public void CallerFunction()
{
    int whatsMyInt = TestEnum(DEF.Four);
}

CallerFunction() から TestEnum() 関数を呼び出し、2 つのうちの 1 つ (理想的にはそれ以上) の列挙を渡します。関数内で比較できるように、整数形式で値を取得する方法を見つける必要があります。ここで、これが単一の列挙型である場合、つまり関数が TestEnum(DEF myDefEnum) の場合、これは簡単ですが、関数は複数の列挙型を処理する必要があります。以前の回答のおかげで、列挙型の型を取得するには、次の 2 つのいずれかを実行できることがわかりました。

1) bool isThisDef = myEnum は DEF です。しかし、列挙型ごとにシナリオを作成するよりも普遍的な方法があるかどうかに興味があります。おそらくこのようなもの

2) myEnumType = myEnum.GetType(); と入力します。しかし、今これをどうするかわかりません。どんな助けでも大歓迎です。=) ちなみに、文字列 testString = myEnum.toString(); エラーが発生します:\

4

4 に答える 4

4
public int TestEnum(Enum myEnum)
{
    return (int)(object)myEnum;
}
于 2012-11-27T23:37:09.490 に答える
2

あなたは単に書く

int returnValue = (int)(object) myEnum;
于 2012-11-27T23:37:12.323 に答える
1

おそらく.Netの今後のリリースで変更される可能性があるため、この動作はあまり信頼できないと思いますが、基になる値も返します。

int returnValue = myEnum.GetHashCode();

PS: Enum int 値を取得するために GetHashCode を使用します。つまり、これを行わないでください...

于 2012-11-27T23:49:58.313 に答える
0

あなたは試すことができます:

int returnValue = Convert.ToInt32(myEnum);

私の考えでは、整数型として明示的に宣言することABCをお勧めします。DEF

public enum ABC : int
{
    Zero = 0,
    One = 1,
    Two = 2
};

public enum DEF : int
{
    Three = 3,
    Four = 4,
    Five = 5
};

次に、を使用しますint returnValue = (int)myEnum;
安全を期すために、提供された列挙型の型を確認する必要があるため、パフォーマンスの向上は小さいものになります (渡すことができるすべての列挙型が整数型に基づいていることを保証できない限り、チェックは必要ありません)。 .

于 2012-11-28T02:02:51.037 に答える