在.net中是否可以将整型枚举设置为任意值?

本文关键字:设置 枚举 任意值 整型 net 是否 | 更新日期: 2023-09-27 18:08:26

由于某种原因,我使用HttpStatusCode枚举来向客户端返回特定的HTTP响应代码的HttpResponseMessageProperty。此枚举不包括422,它未包含在枚举中。有没有办法用整数来设置枚举呢,因为它实际上就是整数?

在.net中是否可以将整型枚举设置为任意值?

是的,这是可能的-内部一个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) );
    }
}

如果枚举具有相同的基结构(通常为int:

),则可以将任何数字强制转换为enum。
response.StatusCode = (HttpStatusCode)422;

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

HttpStatusCode value = (HttpStatusCode)422;