5

Global.asax を使用して、Application_EndRequest イベントを介して各要求の最後にログを記録しています。ただし、HTTPContext.Current.Items コレクションに格納されている特定の値の奇妙な動作が見られます。

以下は、null 許容 Enum のデバッグ出力です。値があることがわかりますが、HasValue が False に解決された?!

{System.Nullable(Of AreaNameEnum)}
    HasValue: False
    hasValue: False
    Value: {System.InvalidOperationException}
    value: ADMIN {0}

HTTPContext.Current にアクセスするにはリクエストのライフサイクルが遅すぎると推測していますが、機能する場合と機能しない場合があります。何が起こっているのかを正確に明らかにできる人はいますか?

ありがとう

4

1 に答える 1

4

Nullable は、ブール値の hasValue と T 値 (T は値の型) を含む構造体です。この場合、列挙型。この場合、enum には何らかの値 (デフォルト 0) が必要ですが、hasValue が false であるため、public Value は例外をスローします。

あなたが見ているのは、Nullable がどのように機能するかの内部です。hasValue が false の場合、値を持つ内部値フィールドに何も読み取ることはできません。結局のところ、値に null が含まれる可能性がある場合、ここで Nullable を使用しても意味がありません。

于 2009-05-14T21:45:11.197 に答える