2009-11-20 6 views
6

У меня есть два текстовых поля, и я хочу пропустить блок кода только, когда оба они пусты:Почему этот оператор IF возвращает false?

if (txtBox1.Text.Trim() != string.Empty && txtBox2.Text.Trim() != string.Empty) 
{ 
    // Do something 
} 

Если какой-либо из текстовых полей есть что-то, я хочу // сделать что- части в выполнить. Только когда оба пустые, я хочу пропустить.

Однако приведенный выше фрагмент кода не работает. Зачем?

+2

String.IsNullOrEmpty - хороший вспомогательный метод для проверки пустых или нулевых строк –

+0

@jstawski: Хороший вызов, хотя, честно говоря, я никогда не видел свойство 'TextBox.Text', возвращающее' null' (чтобы не предполагать, что я эксперт по этому вопросу). –

ответ

24

Я считаю, что ваши логические операторы перепутаны. Что вы ищете?

if (txtBox1.Text.Trim() != string.Empty || txtBox2.Text.Trim() != string.Empty) 
{ 
    // Do something 
} 
+0

О, спасибо, я новичок в C# и не видел очевидного. Спасибо! –

+2

Это скорее общая логическая ошибка, чем C# 1. Для ознакомления с интересом [Contrapositives] [1]. [1]: http: //en.wikipedia. org/wiki/Contraposition – Marius

11

Вы должны заменить && на ||. В настоящее время код в блоке if будет выполнен только в том случае, если оба текстовых поля имеют в них текст.

+0

Я не знаю, кто вас ниспровергал :(Но спасибо за информацию. –

+0

Должно быть, это была верхняя часть, но меня отозвали с моего стола на несколько минут, и теперь я не могу ее изменить. :-( – Sukotto

+0

@Sukotto: Просто нажмите стрелку вверх, и это должно изменить ваш голос. Не работает? –

1
if (txtBox1.Text.Trim() != string.Empty || txtBox2.Text.Trim() != string.Empty) 
{ 
    // Do something 
} 

Вы используете &&, которые потребуют ОБА из них не пусто. Вы должны использовать || (OR), чтобы получить желаемый результат.

0

Может быть проще понять:

if (!(txtBox1.Text.Trim() == string.Empty && txtBox2.Text.Trim() == string.Empty)) 
{ 
    // Do something 
} 
6

Те, кто указал, что вам нужно || вместо & & являются правильными. Если вы предпочитаете & &, вы также можете использовать:

if (!(txtBox1.Text.Trim() == string.Empty && txtBox2.Text.Trim() == string.Empty)) 
{ 
    // Do something 
} 

Разница чисто эстетический, но составляет проверку (на английском языке): «Это не верно, что оба Textboxes пусты», в отличие от «Это правда, что хотя бы одно текстовое поле не пусто». То же самое значение, другой способ выразить это.

Для записи то, как вы это делали в своем первоначальном вопросе, было: «Это правда, что оба текстовых поля не пусты».

2

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

bool BothBoxesEmpty = string.IsNullOrEmpty(TextBox1.Text.Trim()) && 
         string.IsNullOrEmpty(TextBox2.Text.Trim()); 
if (!BothBoxesEmpty) 
{ 
    /* Do your stuff */ 
} 

Вы могли одинаково легко заменить string.IsNullOrEmpty с TextBox1.Text.Trim() == string.Empty, как TextBox1.Text всегда будет возвращать строку (пустой или нет), и никогда не вернется null.

0

Если вы в методе вы могли бы сделать что-то вроде этого, а также:

if (txtBox1.Text.Trim() == string.Empty && txtBox2.Text.Trim() == string.Empty) 
     return; 
//Do Something 
0

Вы могли бы сделать его более кратким путем конкатенации строк, а затем тестирование:

if ((txtBox1.Text.Trim() + txtBox2.Text.Trim()) != string.Empty) 
{ 
    // Do something 
} 

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

0

Это напоминает историю, которую я слышал о младшем кодере, которому было предложено ввести правила расчета страховых выплат, где «все моложе 18 лет и старше 65» не прошли квалификацию. Поэтому он закодирован как:

if (age < 18 and age > 65) ... 

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

+0

Я предполагаю, что это продукт прямого перевода английского заявления ... :) –

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