Странное поведение обнуляемых типов Enum - PullRequest
5 голосов
/ 15 мая 2009

Я использую Global.asax для ведения журналов в конце каждого запроса через событие Application_EndRequest. Однако я вижу странное поведение некоторых значений, хранящихся в коллекции HTTPContext.Current.Items.

Ниже приведен вывод отладочной информации для обнуляемого Enum. Вы можете видеть, что есть значение, но HasValue разрешен в False?!

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

Я предполагаю, что в жизненном цикле запроса слишком поздно получить доступ к HTTPContext.Current - но иногда кажется, что он работает, а иногда нет. Кто-нибудь может пролить больше света на то, что происходит?

Спасибо

1 Ответ

4 голосов
/ 15 мая 2009

Nullable - это структура, которая содержит логическое hasValue и значение T, где T - тип значения. В этом случае перечисление. У перечисления должно быть какое-то значение в этом случае по умолчанию 0, однако публичное значение выдает исключение, поскольку hasValue имеет значение false.

То, что вы видите, - это внутренняя часть того, как Nullable делает то, что делает. Вы не можете ничего прочитать во внутреннем поле значения, имеющем какое-либо значение, когда hasValue имеет значение false. В конце концов, если бы значение могло содержать нуль, не было бы никакого смысла в использовании Nullable здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...