我希望确保一个人提供的号码是合法的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
枚举。
任何想法,伙计们?
答案 0 :(得分:10)
而不是尝试解析值只是我们的IsDefined方法
Enum.IsDefined(typeof(HttpStatusCode),value)
“1”的情况不会失败的原因是你可以对枚举进行二进制算术运算。这对于标志使用了很多,因此枚举中没有具体的值可能仍然是有效值
答案 1 :(得分:5)
如果 value 是与 enumType 的命名常量不对应的名称,则该方法将抛出ArgumentException。如果 value 是不表示 enumType 枚举的基础值的整数的字符串表示形式,则该方法返回其基础值为 value <的枚举成员/ em>转换为整数类型。如果不希望出现这种情况,请调用IsDefined方法以确保整数的特定字符串表示形式实际上是 enumType 的成员。