我有enum
:
public enum Enumeration
{
A,
B,
C
}
采用类型为Enumeration
的一个参数的方法:
public void method(Enumeration e)
{
}
我希望method
只接受A
和B
(C
被视为错误的值),但我需要C
Enumeration
{{1}} 1}}因为其他方法可以接受它作为正确的值。这样做的最佳方式是什么?
答案 0 :(得分:6)
我不会拒绝只是 C
。我会拒绝除A
和B
以外的任何其他值:
if (e != Enumeration.A && e != Enumeration.B)
{
throw new ArgumentOutOfRangeException("e");
}
这很重要,否则人们可以致电:
Method((Enumeration) -1);
它会通过验证。你总是需要知道枚举实际上只是一组命名整数 - 但是任何正确基础类型的整数都可以强制转换为枚举类型。
答案 1 :(得分:5)
抛出异常:
public void method(Enumeration e)
{
if (e != Enumeration.A && e != Enumeration.B) {
throw new ArgumentOutOfRangeException("e");
}
// ...
}
如果您使用的是.NET 4.0或更高版本,则可以使用code contracts。
答案 2 :(得分:1)
如paulsm4所述,您可以定义:
public enum EnumSubset
{
A = Enumeration.A,
B = Enumeration.B,
}
并使用:
public void method(EnumSubset e)
{
}