Разница между прямым и обратным сравнением в C # - PullRequest
0 голосов
/ 15 декабря 2010

это связано со сравнением значений в C #.

в основном по умолчанию, в C # до даты я использовал только прямое сравнение следующим образом:

string value1 = "";

if (value1 == null) 
{ 
    Console.WriteLine("True"); 
} 
else 
{ 
    Console.WriteLine("False"); 
} 

где-то в Интернете, я наткнулся на ссылку, где говорится, что при сравнении значений в C # мы должны предпочесть обратное сравнение как:

string value1 = "";

if (null == value1)  
{ 
    Console.WriteLine("True"); 
} 
else 
{ 
    Console.WriteLine("False"); 
} 

Теперь проблема в том, что есть какая-то принципиальная разница между двумя способами сравнения значений или нет (то есть оба одинаковы).

В поисках благоприятных ответов.

Спасибо

Ответы [ 2 ]

5 голосов
/ 15 декабря 2010

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

По большей части, все, что не является null или не 0, будет рассматриваться как true, в противном случае оно было бы эквивалентно false. Это означало, что любое присвоение константы всегда будет true.

Здесь следует помнить, что функция присваивания возвращает назначенное значение , почти так же, как 5 является результатом 2+3, myInt = 5 также возвращает 5.

Из-за этого было рекомендовано проверить переменную против константы. Пример null на самом деле, вероятно, в этом случае немного надуманный, поскольку в большинстве языков он будет возвращаться как ложный.

Как пример:

if(i = 1)
{
    printf("Always out\n");
}
else
{
    printf("Never prints\n");
}

i присваивается значение 1, которое затем возвращает значение присваивания, 1, в оператор if. Это эквивалентно true, а условие if соответствует.

Если бы вы попытались присвоить i константе 1, вы бы не скомпилировали, и поэтому было рекомендовано делать все в таком порядке (например, 1 == i).

Это не обязательно в C #, и, в дополнение к вашему примеру, рекомендуется вызывать if(String.IsNullOrEmpty(myStringValue)) { //.... }, так как строка имеет ... два ... значения по умолчанию с семантической точки зрения.

1 голос
/ 15 декабря 2010

Обратное сравнение защищает вас от ошибок, когда вы используете == (сравнение) вместо = (назначение).Но complier также предупреждает вас, если вы сделаете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...