Есть ли разница между этими двумя условными утверждениями «если»? - PullRequest
1 голос
/ 22 мая 2010

Сначала, если условие

if(Txt1.Text != "" && Txt2.Text != "")

Второй, если условие

if((Txt1.Text && Txt2.Text) != "")

Есть ли разница между этими двумя условными утверждениями?

Ответы [ 6 ]

7 голосов
/ 22 мая 2010

Да. Второй пытается && две строки и сравнить результат с пустой строкой. Я не верю, что это допустимый C #, поскольку не существует перегрузки && для двух строк.

Я ценю ваше стремление к краткости, но первое действительно то, что вы хотите.

3 голосов
/ 22 мая 2010

Во-первых, как сказал Блэр Конрад, if((Txt1.Text && Txt2.Text) != "") не скомпилируется, поскольку вы не можете выполнить логическую операцию and с двумя строками. Однако, если вы спросите, является ли if((Txt1.Text + Txt2.Text) != "") более эффективным, чем первая операция, я бы сказал, что, вероятно, он не более эффективен по той простой причине, что Txt1.Text + Txt2.Text сначала создаст новую строку, а затем сравнит ее с пустой строкой , Конечно, мы говорим о разнице в наносекундах.

В любом случае, вы должны использовать string.IsNullOrEmpty для каждой из строк, потому что это проясняет ваши намерения.

3 голосов
/ 22 мая 2010

Хм, второй ошибочно напечатан и отклонен компилятором?

1 голос
/ 22 мая 2010

2-й не принят компилятором.потому что строковый тип нельзя сравнивать с логическим типом.

1 голос
/ 22 мая 2010

вы не можете сделать второй. первый правильный.

0 голосов
/ 22 мая 2010
if((Txt1.Text && Txt2.Text) != "")

Хотя булева логика имеет ассоциативные свойства для операторов && и ||, она не применяется к оператору равенства, что выглядит так, как вы пытаетесь сделать здесь:

(a && b) != ""  -- doesn't translate to --> a != "" && b != ""

Равенство, определено в логике первого порядка как рефлексивное (a = a), симметричное (a = b, b = a) и переходное (a = b, b = c) , а = в) , но не ассоциативно.

Кроме того, если вы думаете об этом с точки зрения компилятора, скобки имеют более высокий приоритет , чем оператор равенства. Поэтому, когда компилятор вычисляет выражение (Txt1.Text && Txt2.Text) != "", он сначала оценивает, что находится внутри скобок, а затем выполняет проверку на равенство.

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