2009-05-14 18 views
5

Sto utilizzando Global.asax per eseguire la registrazione alla fine di ogni richiesta tramite l'evento Application_EndRequest. Tuttavia, sto osservando alcuni comportamenti strani di determinati valori memorizzati nella raccolta HTTPContext.Current.Items.Strano comportamento dei tipi Enum nullable

Di seguito è riportato l'output di debug per un valore Null Enum. Puoi vedere che c'è un valore, ma HasValue è stato risolto su False ?!

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

sto indovinando che sia troppo tardi nel ciclo di vita della richiesta di accedere al HttpContext.Current - ma sembra funzionare a volte ea volte no. Qualcuno può fare più luce su esattamente cosa sta succedendo?

Grazie

risposta

4

Nullable è una struttura che contiene un hasValue booleano e un valore T dove T è un tipo di valore. In questo caso un enum. L'enum deve avere qualche valore in questo caso il valore predefinito 0, tuttavia il valore pubblico genera un'eccezione perché hasValue è false.

Quello che state vedendo è l'interno di come Nullable fa quello che fa. Non è possibile leggere nulla nel campo del valore interno che abbia alcun valore quando hasValue è falso. Dopo tutto se il valore potrebbe contenere null non ci sarebbe alcun punto nell'usare Nullable qui.

+0

Sì, questo ha senso ora ci penso. Immagino che la roba di HTTPContext sia stata un'aringa rossa. Grazie. – James