Как стать автором
Обновить

Комментарии 5

Не знал про особенность упаковки nullable, спасибо.
После прочтения сразу возник вопрос — а как работает оператор is?
Ну, для nullable естественно проверяется значение HasValue через get_HasValue.
Дальше — интереснее. Если проверять, скажем, object? на тип T, то используется isinst инструкция.
Т.к. упаковка nullable упаковывает на самом деле значение, то
object x = (object)new int?(5);
и x is int && x is int? вернет true.
Это так же значит, что запакованный nullable можно распаковать как в nullable, так и в базовый тип (т.е. в условный int? и в int).
Немного кода на шарплэбе, который можно запустить.


Отдельный бонус офф-топик — до меня только сейчас дошло, что паттерн not можно повторять много раз подряд, наприме x is null и x is not not not not null это валидные синтаксические конструкции, которые куомпилируются в идентичный IL.

НЛО прилетело и опубликовало эту надпись здесь

У вас в IsDefaultVerbose() отрицание отклеилось.

Как вы это ловко заметили! Спасибо, исправил.
Приз за внимательность определённо ваш. :)

Интересно. Но это один из тех случаев, когда если я увижу код эксплуатирующий данные знания не как результат ошибки, и не увижу к ней развернуто комментария — руки программисту оторву. :/

Зарегистрируйтесь на Хабре , чтобы оставить комментарий