Почему короткие нулевые значения преобразуются в нулевые значения int для сравнения с нулевым?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему короткие нулевые значения преобразуются в нулевые значения int для сравнения с нулевым?

Сообщение Anonymous »

Когда я сравниваю короткие значения, допускающие значение NULL, компилятор сначала преобразует их в целые числа, чтобы выполнить сравнение с NULL. Например, рассмотрим этот простой код:

Код: Выделить всё

short? cTestA;
if (cTestA == null) { ... }
Компилятор преобразует его в:

Код: Выделить всё

short? CS$0$0001 = cTestA;
int? CS$0$0002 = CS$0$0001.HasValue ? new int?(CS$0$0001.GetValueOrDefault()) : null;
if (!CS$0$0002.HasValue){ ... }
Это происходит для всех версий .NET, включая .NET 4.

Что мне здесь не хватает? В чем причина такого двойного преобразования только для проверки HasValue?

Дальнейшие действия

Чего я ожидаю компилятору нужно выполнить простую проверку с помощью .HasValue, если (cTestA.HasValue){}. По крайней мере, именно это я делаю в своем коде после того, как обнаружил это преобразование.

Почему для такого простого теста добавляется весь этот дополнительный код?

Подробнее здесь: https://stackoverflow.com/questions/921 ... -with-null
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»