在.net中是否可以将整型枚举设置为任意值?
本文关键字:设置 枚举 任意值 整型 net 是否 | 更新日期: 2023-09-27 18:08:26
由于某种原因,我使用HttpStatusCode
枚举来向客户端返回特定的HTTP响应代码的HttpResponseMessageProperty
。此枚举不包括422,它未包含在枚举中。有没有办法用整数来设置枚举呢,因为它实际上就是整数?
是的,这是可能的-内部一个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
:
response.StatusCode = (HttpStatusCode)422;
是的,你可以有任何你想要的值(只要它在enum的基类型范围内,通常是int):
HttpStatusCode value = (HttpStatusCode)422;