2015-07-01 4 views
1
private void caseTextBox_TextChanged(object sender, EventArgs e) 
     { 
      var CTcase = caseTextBox.Text; 
      caseTextBox.CharacterCasing = CharacterCasing.Upper; 

      if (CTcase == "THRUHOLE") 
      { 
       displayLabel3.Text = "0"; 
      } 
      else if (CTcase == "EIAA") 
      { 
       displayLabel3.Text = "1"; 
      } 
      else if (CTcase == "EIAB") 
      { 
       displayLabel3.Text = "2"; 
      } 
      else if (CTcase == "EIAC") 
      { 
       displayLabel3.Text = "3"; 
      } 
      else if (CTcase == "EIAD") 
      { 
       displayLabel3.Text = "4"; 
      } 
      else 
      { 
       displayLabel3.Text = "error"; 
      } 
     } 

В каждом заявлении есть 3 значения, которые могут быть равны показанию правильного номера. Но я не хочу писать заявления 15 if/else, чтобы заставить его работать. Я пробовал использовать ||, |, & и &&. Но я получаю сообщение об ошибке, что говоритКак задать «или» в операторе if

Оператор не может применяться к операндам типа «BOOL» и «строка»

private void caseTextBox_TextChanged(object sender, EventArgs e) 
     { 
      var CTcase = caseTextBox.Text; 
      caseTextBox.CharacterCasing = CharacterCasing.Upper; 

      if (CTcase == "THRUHOLE") 
      { 
       displayLabel3.Text = "0"; 
      } 
      else if (CTcase == "EIAA" || "1206") 
      { 
       displayLabel3.Text = "1"; 
      } 
+0

Можете ли вы разместить свой код, в котором вы используете операторов? – Mivaweb

+0

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

+0

@SpaceBison Что относительно перечисления? – MajkeloDev

ответ

0

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

, такие как:

if(CTcase == "THRUHOLE" || CTcase == "somethingelse") 
{ 
    displaylabel3.Text = "0"; 
} 
0

это должно Worki:

CTcase = caseTextBox.Text; 

if (CTcase == "test" || CTcase == "Test" || CTcase == "TEST") 
{ 

} 

Мой путь, чтобы проверить, есть только "ошибка записи" я бы сделать следующее:

CTcase = caseTextBox.Text.ToLower(); 

if (CTcase == "test") 
{ 

} 

Но это работает только в том случае, если вы не хотите делать разницу между «Тест» и «Тест».

1

Есть два оператора, которые, вероятно, сделают трюк.

| - or, который приведет к выполнению всех утверждений в if перед оценкой.

|| является or else, что приведет к тому, что операторы будут выполняться слева направо до тех пор, пока не будет выполнено условие (после чего оно перестает проверять дополнительные условия).

В вашем случае, вы могли бы сделать что-то вроде:

if (CTcase == "THRUHOLE" || CTcase == "some other value" || CTcase == "something else") 
{ 
    displayLabel3.Text = "0"; 
} 
6

Я предпочел бы устранить все сослагательного наклонения (которые выглядят уродливую находясь в большом количестве и сложным) и создать единый словарь вместо:

Dictionary<String, String> labels = new Dictionary<String, String>() { 
    {"THRUHOLE", "0"}, 
    {"EIAA", "1"}, 
    {"1206", "1"}, 
    {"EIAB", "2"}, 
    {"EIAC", "3"}, 
    {"EIAD", "4"}, 
}; 

... 

String text; 

if (labels.TryGetValue(CTcase, out text)) 
    displayLabel3.Text = text; 
else 
    displayLabel3.Text = "error"; 
0

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

public static class StringExtension 
{ 
    public static bool In(this string source, params string[] matches) 
    { 
     return matches.Contains(source); 
    } 
} 

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

string displayLabel = string.Empty; 
string CTcase = "EIAA"; 

if (CTcase.In("THRUHOLE")) 
{ 
    displayLabel = "0"; 
} 
else if (CTcase.In("EIAA", "1206")) 
{ 
    displayLabel = "1"; 
} 

Я надеюсь, что это может помочь вам.

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