4

我有一个enum

public enum Enumeration
{
    A,
    B,
    C
}

以及一个接受一个类型参数的方法Enumeration

public void method(Enumeration e)
{
}

我希望它method只能接受A并且BC被认为是错误的值),但我需要C在我的Enumeration因为其他方法可以接受它作为正确的值。做这个的最好方式是什么?

4

3 回答 3

6

我不会拒绝只是 C。我会拒绝除and以外的任何值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 回答