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