如何在if语句中说“或”

时间:2015-07-01 14:53:53

标签: c# visual-studio-2012 if-statement

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语句来使它工作。我尝试使用|||&&&。但我不断收到错误消息

  

运算符不能应用于'bool'和'string'

类型的操作数
 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";
            }

6 个答案:

答案 0 :(得分:6)

我宁愿消除所有 ifs (当大量且复杂时看起来很丑陋)并创建一个< em>字典而不是:

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";

答案 1 :(得分:1)

有两个操作员可能会这样做。

|or,会导致if中的所有陈述在评估之前执行。

||or else,它将导致语句从左到右执行,直到满足条件为止(此时它会停止测试其他条件)。

在您的情况下,您可以执行以下操作:

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

答案 2 :(得分:1)

例如:

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

但是 - 对于像这样的案例 - 使用枚举。它更具可读性! https://msdn.microsoft.com/pl-pl/library/sbbt4032.aspx

答案 3 :(得分:0)

听起来你可能正在使用||不当。它必须是一个完整的声明本身。

如:

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

答案 4 :(得分:0)

这应该有效:

CTcase = caseTextBox.Text;

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

}

我的方法是检查是否只有“写入错误”,我会执行以下操作:

CTcase = caseTextBox.Text.ToLower();

if (CTcase == "test")
{

}

但这只有在您不想在“测试”和“测试”之间产生差异时才有效。

答案 5 :(得分:0)

我认为你可以像这样扩展字符串类的方法

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

然后在您的程序中使用它,而不必担心许多if-clause

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

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

我希望这对你有所帮助。