4

私はenum

public enum Enumeration
{
    A,
    B,
    C
}

そして、タイプの1つの引数を取るメソッドEnumeration

public void method(Enumeration e)
{
}

そして(間違った値と見なされる)methodだけを受け入れることができるようにしたいのですが、他の方法がそれを正しい値として受け入れることができるので、私は必要です。これを行うための最良の方法は何ですか?ABCCEnumeration

4

3 に答える 3

6

私はただ 拒否しませんCおよび以外の値ABは拒否します:

if (e != Enumeration.A && e != Enumeration.B)
{
    throw new ArgumentOutOfRangeException("e");
}

そうでなければ人々が呼ぶことができるので、これは重要です:

Method((Enumeration) -1);

そしてそれはあなたの検証に合格するでしょう。列挙型は実際には名前付き整数のセットにすぎないことに常に注意する必要がありますが、正しい基になる型の任意の整数を列挙型にキャストできます。

于 2012-06-23T19:04:17.067 に答える
5

例外をスローします:

public void method(Enumeration e)
{
    if (e != Enumeration.A && e != Enumeration.B) {
        throw new ArgumentOutOfRangeException("e");
    }
    // ...
}

.NET 4.0以降を使用している場合は、コードコントラクトを使用できます。

于 2012-06-23T19:01:22.853 に答える
1

paulsm4が述べたように、次のように定義できます。

public enum EnumSubset
{
    A = Enumeration.A,
    B = Enumeration.B,
}

そして使用:

public void method(EnumSubset e)
{
}
于 2012-06-23T19:07:04.367 に答える