管理枚举字段

Nic*_*ick 4 c# enums

我有一个enum:

public enum Enumeration
{
    A,
    B,
    C
}
Run Code Online (Sandbox Code Playgroud)

并且一个方法接受一个类型的参数Enumeration:

public void method(Enumeration e)
{
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 6

我不会拒绝公正 C.我会拒绝其他任何值比AB:

if (e != Enumeration.A && e != Enumeration.B)
{
    throw new ArgumentOutOfRangeException("e");
}
Run Code Online (Sandbox Code Playgroud)

这很重要,否则人们可以打电话:

Method((Enumeration) -1);
Run Code Online (Sandbox Code Playgroud)

它会通过验证.您总是需要知道枚举实际上只是一组命名整数 - 但是右侧基础类型的任何整数都可以强制转换为枚举类型.

  • @gliderkite:我会说,因为它适合.正如异常描述所述,它"在允许范围之外".请注意,`ArgumentOutOfRangeException`扩展了'ArgumentException`,因此它仍然是一个`ArgumentException`. (2认同)

Mar*_*ers 5

抛出异常:

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

如果您使用的是.NET 4.0或更高版本,则可以使用代码契约.