如果条件逻辑不起作用

时间:2012-03-20 06:54:06

标签: c# if-statement

我在表单中添加了一个标签,该标签对于user.Base在标签包含的文本上继续进行。

这是我的逻辑,但它失败了。我想这样,如果标签包含“不匹配”或“超时”,则不应该继续。

If((!label.Text.Contain("No match")) || label.Text.Contain("Time out"))
{
// proceed further code
}
else
{
// code 
}

这里标签包含“不匹配”,然后它移动到其他正确的部分。但是当标签包含“超时”时,它会进入if循环内部。所以我修改了这样的代码

If((!label.Text.Contain("No match")) || (!label.Text.Contain("Time out")))
{
// proceed further code
}
else
{
// code 
}

仍然没有工作。如果标签包含“超时”,仍然会进入if loop else else loop.Label一次只包含一个文本“No match”或“Time out”或任何其他文本。

3 个答案:

答案 0 :(得分:5)

我怀疑你想要:

if(!(label.Text.Contains("No match") || label.Text.Contains("Time out")))
{
    // proceed further code
}
else
{
   // code 
}

请注意包围。内部部分是

label.Text.Contains("No match") || label.Text.Contains("Time out")

然后那就倒了。我可能会把它拉成一个单独的变量:

bool timedOutOrNoMatch = label.Text.Contains("No match") || 
                         label.Text.Contains("Time out");
if (!timedOutOrNoMatch)
{
}
else 
{
}

或者,颠倒它的意义:

if (label.Text.Contains("No match") || label.Text.Contains("Time out"))
{
    // Do whatever was in your else block.
}
else
{
    // Do whatever was in your first block.
}

如果你对“坏”标签的回复是让你返回或抛出异常的东西,这也可以减少嵌套量:

if (label.Text.Contains("No match") || label.Text.Contains("Time out"))
{
    output.Text = "Go away";
    return;
}
// Now handle the success case

答案 1 :(得分:2)

尝试使用以下代码:

    if(!(label.Text.Contains("No match") || label.Text.Contains("Time out")))
    {
    // proceed further code
    }
    else
    {
    // code 
    }

如果您希望修改代码,请使用AND运算符:

       if(!label.Text.Contains("No match") && !label.Text.Contains("Time out"))
        {
        // proceed further code
        }
        else
        {
        // code 
        }

答案 2 :(得分:2)

要以更易理解的形式编写代码,您应该以可读且更易理解的方式编写代码。我更喜欢这样写这个语句

bool ProceedFurther()
{
  //Don't proceed if No Match
  if(!label.Text.Contains("No match")) return false;

  //Don't proceed if Time out
  if(!label.Text.Contains("Time out")) return false;

  //Proceed otherwise
  return true;
}

并在所需位置调用ProceedFurther方法。

如果你真的只想要那个陈述,那么以下是最好的(大多数人忘记将||更改为&&并且将条件更改为负数(使用!)。

if(!label.Text.Contains("No match") && !label.Text.Contains("Time out"))