2009-05-14 9 views
5

Ich verwende Global.asax, um Protokollierung am Ende jeder Anforderung über das Ereignis Application_EndRequest durchzuführen. Ich sehe jedoch ein seltsames Verhalten bestimmter Werte, die in der HTTPContext.Current.Items-Auflistung gespeichert sind.Seltsames Verhalten von Nullable Enum-Typen

Unten ist die Debug-Ausgabe für ein Nullable Enum. Sie können sehen, dass es einen Wert gibt, aber HasValue auf False aufgelöst ?!

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

Ich vermute, dass es zu spät in der Anfrage-Lebenszyklus ist die HttpContext.Current zugreifen - aber es scheint manchmal und manchmal nicht funktioniert. Kann jemand mehr Licht ins Dunkel bringen?

Dank

Antwort

4

Nullable ist eine Struktur, die einen Booleschen hasValue und einen T-Wert enthält wobei T ein Wert Typ ist. In diesem Fall ein enum. Die Enumeration muss in diesem Fall einen Wert von 0 haben, der public Value löst jedoch eine Exception aus, weil hasValue false ist.

Was Sie sehen, ist die Interna von NULL, was tut, was es tut. Sie können nichts in das interne Wertfeld mit einem Wert lesen, wenn hasValue false ist. Wenn der Wert null enthalten könnte, würde es keinen Sinn geben, Nullable hier zu verwenden.

+0

Ja, das macht Sinn jetzt denke ich darüber nach. Ich denke, das HTTPContext-Zeug war ein Ablenkungsmanöver. Vielen Dank. – James