Когда я сравниваю короткие значения с нулевым значением, компилятор сначала преобразует их в целое число, чтобы сравнить с 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, if (cTestA.HasValue){}
. По крайней мере, это то, что я делаю в своем коде после обнаружения этого преобразования.
Почему весь этот дополнительный код добавлен для такого простого теста?