По этой причине null
не оценивается до false
в условных обозначениях?Почему значение null не равно false?
Сначала я подумал о назначениях, чтобы избежать ошибки использования =
вместо ==
, но это может быть легко запрещено компилятором.
if (someClass = someValue) // cannot convert someClass to bool. Ok, nice
if (someClass) // Cannot convert someClass to bool. Why?
if (someClass != null) // More readable?
Я думаю, что это довольно разумно предположить, что null
означает false
. Есть и другие языки, которые тоже используют это, и из-за этого у меня не было ошибки.
Редактировать: И я, конечно, ссылаюсь на ссылочные типы.
Хороший комментарий Даниэль Earwicker на ошибку назначениях ... компилируется без предупреждения, потому что он имеет значение bool
:
bool bool1 = false, bool2 = true;
if (bool1 = bool2)
{
// oops... false == true, and bool1 became true...
}
Простой ответ: «Так хотели дизайнеры C#». Но это не отвечает на вопрос. Кто-нибудь знает, почему разработчикам языка не нравилось автоматическое литье ссылок на булевы (например, C/C++/Python)? – Karmastan
Я пытаюсь отследить ссылку - я думаю, что мне удалось поговорить с одной из языковых команд некоторое время назад, что на самом деле не помогает –
Я думаю, что только программисты C сочтут разумным, что null означает false. False - значение, null - отсутствие значения. Я считаю, что C# правильно это понимает. Другие языки, которые были построены без логического типа или понятия указателя (или типа NULL), просто перегружали int, чтобы означать все эти разные вещи. Почему NULL == false и false == 0? Они не должны. – Dolphin