是否可以在.Net中将整数枚举设置为任意值

时间:2015-08-17 18:15:46

标签: c# wcf enums

出于某种原因,我用来向客户端返回特定HTTP响应代码的HttpResponseMessageProperty使用HttpStatusCode枚举。此枚举不包括422,它不包含在枚举中。是否有任何方法可以使用整数设置枚举,因为它的内容是什么?

3 个答案:

答案 0 :(得分:6)

是的,它是可能的 - 在内部enum值只是一个整数,你可以“强制”枚举值以获得无效值,CLR将以其快乐的方式继续。

例如:

enum Foo {
   Bar = 1,
   Baz = 2
}

void Test() {
    Foo foo; // as Foo is a value-type and no initial value is set, its value is zero.
    Console.WriteLine( foo ); // will output "0" even though there is no enum member defined for that value

    Foo foo2 = (Foo)200;
    Console.WriteLine( foo2 ); // will output "200"
}

这就是为什么在使用未知来源的枚举值时,您应该始终处理default案例并妥善处理:

public void DoSomethingWithEnum(Foo value) {
    switch( value ) {
        case Foo.Bar:
            // do something
            break;
        case Foo.Baz:
            // do something else
            break;
        default:
            // I like to throw this exception in this circumstance:
            throw new InvalidEnumArgumentException( "value", (int)value, typeof(Foo) );
    }
}

答案 1 :(得分:3)

您可以将任何数字转换为枚举,因为枚举具有相同的基本结构(通常是int

response.StatusCode = (HttpStatusCode)422;

答案 2 :(得分:2)

是的,你可以拥有你想要的任何值(只要它在enum的基本类型的范围内,通常是int):

HttpStatusCode value = (HttpStatusCode)422;