Проверка нескольких условий в одном операторе If - C # - PullRequest
1 голос
/ 25 января 2012

У меня есть форма, в которой есть много текстовых полей, из которых необходимо заполнить три текстовых поля, чтобы отправить форму. Я не хочу использовать каждый блок If для каждого текстового поля. Есть ли способ использовать один оператор if для всех трех текстовых полей? Я использую следующий код:

if (textBox1.Text != "" || textBox2.Text != "" || textBox4.Text != "")
{
   // Code
}
else
{
   MessageBox.Show("Fill required fields");
}

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

Ответы [ 7 ]

15 голосов
/ 25 января 2012
 if (textBox1.Text != "" &&  textBox2.Text != "" && textBox4.Text != "")
 {
     // Code
 }
 else
 {
     MessageBox.Show("Fill required fields");
 }

Вы хотите, чтобы все условия прошли. Это соответствует семантике логического оператора И &&.

Если у вас есть тонны текстовых полей, я бы хотел сохранить их в списке:

var boxes = new List<TextBox>{
     textBox1,
     textBox2,
     textBox3,
     //...
};
if (boxes.Any(tb => string.IsNullOrEmpty(tb.Text)))
{
     MessageBox.Show("Fill required fields");
}
else
{
    // Code
}

Я также предпочитаю сохранять исключение в части if, возвращая или выдавая ошибку, и пропуская часть else, поскольку это просто нормальный поток кода. Таким образом код, который вы ожидаете выполнить, будет как можно дальше влево.

5 голосов
/ 25 января 2012

Вы должны изменить || на &&

3 голосов
/ 25 января 2012

Вы можете определить метод для проверки пустых строк.

public class Test
{   
  public static bool IsEmpty(params string []args)
    {
        if (args.Length == 0) return true ;
        return args.Any(p => string.IsNullOrEmpty(p));
    }
}

Для проверки строк,

if(!Test.IsEmpty(TextBox1.Text,TextBox2.Text,TextBox3.Text))
 {
   //valid
 }
3 голосов
/ 25 января 2012

Вы создали коллекцию or операторов, поэтому для продолжения нужно указать только одно значение. Вместо этого вам нужно and их:

if (textBox1.Text != "" && textBox2.Text != "" && textBox4.Text != "")
2 голосов
/ 25 января 2012

Вы используете ИЛИ (||) и должны вместо этого использовать И (&&).Вы хотите, чтобы ВСЕ три текстовых поля были непустыми строками.Проверьте следующий код:

if (textBox1.Text != String.Empty && textBox2.Text != String.Empty && textBox4.Text != String.Empty)
{
  // Code
}
else
{
  MessageBox.Show("Fill required fields");
}

Вы также можете создать коллекцию TextBox и прокрутить их, чтобы проверить наличие непустых строк.Примерно так:

List<TextBox> _lstTextBoxes = new List<TextBox>();
_lstTextBoxes.Add(textBox1);
_lstTextBoxes.Add(textBox2);
_lstTextBoxes.Add(textBox3);

Boolean checkFailed = false;
foreach(TextBox tb in _lstTextBoxes)
  if(tb.Text == String.Empty)
    checkFailed = true;

if(checkFailed)
  MessageBox.Show("Fill required fields");
else
  //code

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

1 голос
/ 25 января 2012

Вместо использования OR (||) используйте AND (&) в вашем состоянии.

Предложение

  • Используйте функцию Trim из string для удалениялюбые пробелы из текстового поля (если требуется)
  • Вместо сравнения, например textBox1.Text != "" do String.IsNullOrEmpty(textBox1.Text) == false
0 голосов
/ 25 января 2012

Если у вас есть всего 4 текстовых поля, приведенный ниже код будет работать

if ((textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "") || (textBox1.Text != "" && textBox2.Text != "" && textBox4.Text != "") ||
        (textBox1.Text != "" && textBox3.Text != "" && textBox4.Text != "") || (textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "")
        )
    {                  
        // Code             
    }             
    else             
    {                 
        MessageBox.Show("Fill required fields");             
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...