Вчера я завтракал с другом, и они жаловались на null
на С#. Он заявил, что null
нелогичен. Я решил проверить его претензии, поэтому я проверил несколько простых логических предложений:
Console.WriteLine(null == null); //True
//Console.WriteLine(null == !!null); //BOOM
Console.WriteLine(10 >= null); //False
Console.WriteLine(10 <= null); //False
Console.WriteLine(!(10 >= null)); //True
Console.WriteLine(!(10 <= null)); //True
Проверка равенства кажется простой, и это то, чего я ожидал бы. Тем не менее, чем больше/меньше заявлений, тем логически противоречивы, которые я считаю очень запутанными! Не должны ли эти броски? Операция отрицания срабатывает так, как вы ожидали.
Если я попытаюсь выполнить сравнения (помимо равенства), используя null
в Ruby или Python, я получаю ошибку типа в строках "невозможно сравнивать число с nil". Почему С# не делает этого?