0

我有一个 IF 语句,应该确保TextBox1.TextandTextBox2.Text不匹配或不为空。如果它们不匹配或不为空,则应该将框中的文本分配给两个字符串变量。我无法弄清楚为什么当我将两个文本框留空时,真正的陈述仍然会触发。

if ((tbStartBreak2.Text != tbEndBreak2.Text) || (tbStartBreak2.Text == "" && tbEndBreak2.Text == ""))
{
  sb2 = tbStartBreak2.Text;
  se2 = tbStartBreak2.Text;
}
4

4 回答 4

5

if 语句中有两个条件:

if ((tbStartBreak2.Text != tbEndBreak2.Text) || (tbStartBreak2.Text == "" && tbEndBreak2.Text == ""))

第一个检查以确保它们不匹配(所以,很好)。第二个检查以确保它们空白的(所以,不好)。你要这个:

if ((tbStartBreak2.Text != tbEndBreak2.Text) || (tbStartBreak2.Text != "" && tbEndBreak2.Text != ""))

另外,你想做什么?如果您真的希望它们不匹配或不为空白,则第二个条件是您唯一需要的条件 - 因为唯一的错误情况是它们都是空白的。

于 2013-07-03T16:10:44.167 回答
1

你写了“OR 文本框是空白的”,你需要“OR 文本框不是空白的”

    if ((tbStartBreak2.Text != tbEndBreak2.Text) || (tbStartBreak2.Text != "" && tbEndBreak2.Text != ""))
    {
        sb2 = tbStartBreak2.Text;
        se2 = tbStartBreak2.Text;
    }

作为旁注,我会替换""string.Empty可读性。

    if ((tbStartBreak2.Text != tbEndBreak2.Text) || (tbStartBreak2.Text != string.Empty && tbEndBreak2.Text != string.Empty))
    {
        sb2 = tbStartBreak2.Text;
        se2 = tbStartBreak2.Text;
    }

为了提高可读性,您可以提取这些大条件

    if (TextboxesDoNotMatch() || TextboxesAreNotEmpty())
    {
        sb2 = tbStartBreak2.Text;
        se2 = tbStartBreak2.Text;
    }

private bool TextboxesDoNotMatch()
{
    return tbStartBreak2.Text != tbEndBreak2.Text;
}

private bool TextboxesAreNotEmpty()
{
    return tbStartBreak2.Text != string.Empty && tbEndBreak2.Text != string.Empty;
}
于 2013-07-03T16:11:29.087 回答
0

如果您希望它返回它们不是空白的,那么您需要这样做

(tbStartBreak2.Text != "" && tbEndBreak2.Text != "")
于 2013-07-03T16:11:57.430 回答
0

您在两个条件之间都有一个 OR,因此当两者都为空时,无论第一部分,第二部分都将为真

(tbStartBreak2.Text == "" && tbEndBreak2.Text == "")

于 2013-07-03T16:13:02.387 回答