我有一个enum
:
public enum Enumeration
{
A,
B,
C
}
以及一个接受一个类型参数的方法Enumeration
:
public void method(Enumeration e)
{
}
我希望它method
只能接受A
并且B
(C
被认为是错误的值),但我需要C
在我的Enumeration
因为其他方法可以接受它作为正确的值。做这个的最好方式是什么?
我不会拒绝只是 C
。我会拒绝除and以外的任何值A
B
:
if (e != Enumeration.A && e != Enumeration.B)
{
throw new ArgumentOutOfRangeException("e");
}
这很重要,否则人们可以调用:
Method((Enumeration) -1);
它会通过你的验证。您始终需要注意,枚举实际上只是一组命名整数 - 但任何正确基础类型的整数都可以转换为枚举类型。
抛出异常:
public void method(Enumeration e)
{
if (e != Enumeration.A && e != Enumeration.B) {
throw new ArgumentOutOfRangeException("e");
}
// ...
}
如果您使用的是 .NET 4.0 或更高版本,那么您可以使用代码协定。
正如 paulsm4 提到的,您可以定义:
public enum EnumSubset
{
A = Enumeration.A,
B = Enumeration.B,
}
并使用:
public void method(EnumSubset e)
{
}