繁体   English   中英

如何在if语句中说“或”

[英]How to ask say “or” in an 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";
            }

我宁愿消除所有if (当数量庞大且复杂时看起来很难看),而是创建一个字典

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

有两个运算符可能会解决问题。

| or ,它将导致if所有语句在评估之前执行。

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

就您而言,您可以执行以下操作:

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

例如:

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

但是-对于这种情况-使用枚举。 它更具可读性! https://msdn.microsoft.com/pl-pl/library/sbbt4032.aspx

听起来您可能正在使用|| 不正确地 它本身必须是完整的声明。

如:

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

这应该工作:

CTcase = caseTextBox.Text;

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

}

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

CTcase = caseTextBox.Text.ToLower();

if (CTcase == "test")
{

}

但这仅在您不想在“测试”和“测试”之间进行区分时才有效。

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

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

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM