5

我希望确保一个人提供的数字是合法的HttpStatusCode

起初我想使用Enum.TryParse(..)orEnum.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枚举。

有什么想法吗,伙计们?

4

2 回答 2

10

而不是尝试简单地解析值,我们使用 IsDefined 方法

Enum.IsDefined(typeof(HttpStatusCode),value)

“1”的情况没有失败的原因是您可以对枚举进行二进制算术。这被大量用于标志,因此枚举中没有特别指定的值可能仍然是有效值

于 2012-04-29T06:51:24.867 回答
5

记录在案的行为

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

于 2012-04-29T07:04:29.523 回答