5

人が提供する番号が正当な HttpStatusCodeであることを確認したいと思います。

最初はEnum.TryParse(..)orを使用することを考え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

アイデアはありますか?

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 に答える