2009-05-14 17 views
5

Używam Global.asax do wykonywania rejestrowania na końcu każdego żądania za pośrednictwem zdarzenia Application_EndRequest. Jednak widzę pewne dziwne zachowanie niektórych wartości przechowywanych w kolekcji HTTPContext.Current.Items.Dziwne zachowanie zerowych typów Enum

Poniżej znajduje się wynik debugowania dla zerowalnego Enum. Widać, że istnieje wartość, ale HasValue została rozwiązana na False ?!

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

Jestem zgadywania, że ​​jest zbyt późno na żądanie cyklu aby uzyskać dostęp do HttpContext.Current - ale wydaje się, że czasami działa, a czasami nie. Czy ktoś może rzucić więcej światła na to, co się dzieje?

Dzięki

Odpowiedz

4

Nullable jest strukturą, która zawiera logiczną hasValue i wartość T, gdzie T jest typ wartości. W tym przypadku wyliczenie. Wyliczenie musi w tym przypadku mieć wartość domyślną 0, jednak publiczna wartość zgłasza wyjątek, ponieważ hasValue ma wartość false.

To, co widzisz, to wnętrze tego, jak Nullable robi to, co robi. Nie można odczytać niczego w wewnętrznym polu wartości o dowolnej wartości, gdy hasValue ma wartość false. W końcu, gdyby wartość mogła zawierać wartość null, nie byłoby sensu używać tutaj opcji Nullable.

+0

Tak, to ma sens teraz, myślę o tym. Domyślam się, że rzeczy HTTPContext były czerwonym śledziem. Dzięki. – James