如何在.NET中检查整数是否为合法的HttpStatusCode?

6
我希望确保人们提供的数字是一个合法的HttpStatusCode
起初,我考虑使用Enum.TryParse(..)Enum.Parse(..),但如果提供了一些错误的数据,可能会得到无效的结果。
例如:
In: Enum.Parse(typeof (HttpStatusCode), "1")
Out: 1

In: Enum.Parse(typeof (HttpStatusCode), "400")
Out: BadRequest

In: Enum.Parse(typeof (HttpStatusCode), "aaa")
Out: System.ArgumentException: Requested value 'aaa' was not found.

好的,如果我传入错误的aaa值,我会得到System.Argument异常。但是当我传入数字1(作为文本,而不是int)时,我得到了返回值1。我本来期望这会失败并抛出异常。

传递值400 确实 返回正确的BadRequest枚举。

有任何想法吗,伙计们?

2个回答

11

不要试图解析该值,而是使用IsDefined方法

Enum.IsDefined(typeof(HttpStatusCode),value)

之所以使用"1"不会失败的原因是,您可以对枚举进行二进制算术运算。这在标志中经常使用,因此枚举中未特别指定的值仍然可能是有效值。


1
先生/女士,您是一个有教养的绅士/淑女! /我低声呢喃:哇塞^哇塞! - Pure.Krome

5

这是文档化的行为

如果value是一个与enumType的命名常量不对应的名称,则该方法会抛出一个ArgumentException异常。如果value是一个不表示enumType枚举类型的基础值的整数的字符串表示形式,则该方法返回一个其基础值为将value转换为整数类型后的值的枚举成员。如果不希望发生这种情况,请调用IsDefined方法,以确保特定的整数字符串表示形式实际上是enumType的成员。


很好发现。我确实以光速浏览了文档,错过了这个非常重要的段落。很敏锐! - Pure.Krome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接