Исходя из этого вопроса , я (и ОП в указанном вопросе) запутался, когда этот фрагмент кода компилируется и запускается:
DateTime dateTime = new DateTime();
bool isFalse = dateTime == null;
bool isTrue = dateTime != null;
Обратите внимание, что переменная dateTime
не nullable
. Когда я наводю курсор на знак равенства, он говорит, что его подпись - bool DateTime.operator==(DateTime dateTime1, DateTime dateTime2)
, а null
- Nullable<DateTime>
.
Что здесь делает компилятор? Использует ли он какое-то неявное преобразование?
Я нашел похожий вопрос здесь , но он просто устраняет проблему и не объясняет, почему компилятор делает это.