2009-08-12 2 views
4

Возможные Duplicates:
(0 == variable) or (null == obj): An outdated practice in C#?
Why does one often see “null != variable” instead of “variable != null” in C#?В C# Разница между (пользователем == NULL) и (нуль == пользователя)

Я видел много раз люди оценки нулевой переменной вместо вычисления переменной в null.

if(null== user) 

вместо

if(user==null) 

Я знаю, как пытаются достичь того же functionality.So, Есть ли какой-нибудь стандарт или просто чисто личные предпочтения. Прокомментируйте, пожалуйста.

+1

Я бы использовал if (user == null), имеет смысл при чтении его обратно. – ThePower

+1

Это обман, который уже очень хорошо ответил здесь: http://stackoverflow.com/questions/655657/ –

+0

И обман этого: http://stackoverflow.com/questions/271561/why-does- one-often-see-null-variable-вместо-variable-null-in-c –

ответ

5

если (пользователь == NULL) легче читать

+1

По крайней мере, для людей, читающих слева направо. –

+0

не сделал бы этого: (null == user) fi – Keith

6

Нет, нет никакой разницы.

Вы используете первое, потому что иногда на некоторых языках случайное назначение может привести к «истинному» (например, JavaScript).

Итак, вы предпочитаете писать константу слева, так что это время компиляции (если оно у вас есть, JavaScript явно не означает) ошибку или, в лучшем случае, ошибку времени выполнения, а не просто ошибку.

1

Без уважения между двумя утверждениями они равны. И это связано с тем, как разработчик писал код.

+0

Не то же самое, если (==) переопределяется классом пользователя! –

+0

@ JerryNixon-MSFT Определенная пользователем перегрузка должна быть действительно больной, поскольку они ведут себя по-другому. Но я могу написать больного типа 'public static operator == (User a, User b) {return object.ReferenceEquals (b, null); } '. Мой оператор смотрит только на его правый операнд и полностью игнорирует левый операнд. –

0

Это только делает более логический смысл делать:

если (пользователь == NULL)

как это пользователь вы оцениваете, вы просто используете нуль в качестве сравнения.

0

Они достигают того же. Лично я никогда не видел пользователя null == в любом из моих проектов, но если я должен сделать предположение, я бы сказал, что он связан с тем, как вы читаете свой ежедневный язык. Если вы из Европы, то вы читаете слева направо, но некоторые языки читаются справа налево, и это может произойти из-за этого.

6

Я думаю, что null == user - лучшая практика в мире C/C++.

Это предотвращает опечатки, как:

if (user = null) { 

на происходящее, так как они проходят молча, и они очень опасны. Использование null = user более безопасно в C/C++ (но не в C#, поскольку компилятор будет жаловаться), поскольку компилятор не может его скомпилировать.

+2

Но осторожно, компилятор C# не будет жаловаться на это: 'bool a; if (a = true) {} ' –

3

это происходит от C

Вы могли бы легко написать если (пользователь = NULL) по ошибке только с одним знаком =, который вместо сравнения правопреемников неопределенных для пользователя, а затем проверяет значение нуля.

Если вы написали это как «если (NULL == пользователя)», то вы получили ошибку компилятора, если вы случайно написал только один =

Я никогда не любил его, он был ошибкой, я редко, а если Я сделал это, как правило, попался в первый раз, когда я запускал программу. Но это сделало код, на мой взгляд, намного труднее читать.

В C# нет причин, кроме привычки.

22

user == null Человек говорит.

null == user Йода говорит.

К компилятору они такие же, поэтому выберите тот, с которым вам больше всего нравится.

5

Насколько я знаю ...

null == Объект будет сравнительным эталоном. объект == null может быть перегружен.

+0

Хорошо, я просто хотел упомянуть о перегрузке. null == объект также может быть перегружен: 'public static bool operator == (object a, Person b)' – Kobi

+0

Если все перегрузки имеют один и тот же тип в левом и правом операнде, скажем, что существует перегрузка 'operator == (Пользователь a, User b) ', но не перегружает' == ', где левый и правый операнды имеют разные типы, тогда' null == obj' попадет в ту же самую перегрузку, что и «obj == null». Это, безусловно, самая распространенная ситуация. «Гетерогенная» перегрузка, как в комментарии @ Kobi, редка и немного «патологическая». –

Смежные вопросы