Такое поведение звучит неправильно для меня.Nullable <= vs == результат сравнения
DateTime? birth = null;
DateTime? death = null;
Console.WriteLine(birth == death); // true
Console.WriteLine(birth <= death); // false
Почему это так? Это невероятно странно. Конечно, я имею в виду, почему второе выражение не оценивает значение true
.
EDIT:
Я понимаю, что следующие сравнения возвращают false
, потому что он не может сказать, как они соотносятся друг с другом:
Console.WriteLine(birth < death); // false
Console.WriteLine(birth > death); // false
Это вполне понятно поведение. Но ... посмотрим на логику:
<=
означает<
или==
- мы не знаем, как читать
<
- это может бытьtrue
илиfalse
- мы знаем, что
==
являетсяtrue
- , поскольку одно из условий:
true
, другое состояние не может не соответствует результат. Это логика или, а не и.
Я считаю, что true or something else
должно быть правдой.
Я знаю, что команда C# создала его таким образом, но моя интуиция отличается. Так как умные люди написали C# с такими правилами, я просто хочу узнать почему моя интуиция здесь не так :)
Вы спрашиваете, почему язык разработан таким образом, или хотите доказать, что поведение, которое вы видите, соответствует языку? –
@JonSkeet Почему язык спроектирован таким образом :) Я просто не понимаю причины, чтобы заставить его вести себя таким образом ... –
false в этом случае означает «неизвестно». Дизайнеры могли бы реализовать операторы сравнения (исключая == и! =), Чтобы они возвращали нулевый логический результат, а не логический, но читаемость кода, использующего их, была бы явно затронута. Я предполагаю, что они предпочли реализовать его таким образом, хотя могут быть угловые случаи, которые четко документированы. –