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

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

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

40
задан Peter Mortensen 25 September 2013 в 01:57
поделиться