为什么这个IF语句返回false?

时间:2009-11-20 16:10:01

标签: c# .net

我有两个文本框,当两者都为空时我想跳过一段代码

if (txtBox1.Text.Trim() != string.Empty && txtBox2.Text.Trim() != string.Empty )
{
     // Do something
}

如果其中一个文本框有问题,我希望执行 // Do something 部分。只有当两者都是空的时候我才想跳过。

但是上面的代码片段不起作用。为什么呢?

10 个答案:

答案 0 :(得分:24)

我相信你的逻辑运算符混乱了。您正在寻找的是

if (txtBox1.Text.Trim() != string.Empty || txtBox2.Text.Trim() != string.Empty )
{
     // Do something
}

答案 1 :(得分:11)

您应该将&&替换为||。目前,if块中的代码只有在两个文本字段都包含文本时才会执行。

答案 2 :(得分:6)

那些指出你需要的人||而不是&&是对的。如果您更喜欢&&,您还可以使用:

if (!(txtBox1.Text.Trim() == string.Empty && txtBox2.Text.Trim() == string.Empty))
{
     // Do something
}

差异纯粹是审美,但相当于检查(英文):“是真的,两个文本框都是空的”,而不是“至少有一个文本框不是'空。“同样的意思,不同的方式。

为了记录,你在原始问题中的方式是:“两个文本框都不是空的。”

答案 3 :(得分:3)

你想要||而不是&&。

答案 4 :(得分:2)

我将BothBoxesEmpty拆分为一个单独的变量以使其更具可读性...否则所有括号都变得难以理解。如果您选择,可以合并这两个语句:

bool BothBoxesEmpty = string.IsNullOrEmpty(TextBox1.Text.Trim()) &&
                      string.IsNullOrEmpty(TextBox2.Text.Trim());
if (!BothBoxesEmpty)
{
    /* Do your stuff */
}

你可以同样轻松地将{。{1}}替换为字符串.IsNullOrEmpty为TextBox1.Text.Trim() == string.Empty将始终返回一个字符串(空或不),永远不会返回TextBox1.Text

答案 5 :(得分:1)

if (txtBox1.Text.Trim() != string.Empty || txtBox2.Text.Trim() != string.Empty )
{
     // Do something
}

你正在使用&&,这将要求他们同时不是空的。您应该使用||(OR)来获得所需的结果。

答案 6 :(得分:0)

可能更容易理解:

if (!(txtBox1.Text.Trim() == string.Empty && txtBox2.Text.Trim() == string.Empty ))
{
     // Do something
}

答案 7 :(得分:0)

如果你使用某种方法,你也可以这样做:

 if (txtBox1.Text.Trim() == string.Empty && txtBox2.Text.Trim() == string.Empty )
      return;
 //Do Something

答案 8 :(得分:0)

你可以通过连接字符串,然后测试来使它更简洁:

if ((txtBox1.Text.Trim() + txtBox2.Text.Trim()) != string.Empty )
{
    // Do something
}

根据方框所代表的内容,这可能不太明显。

答案 9 :(得分:0)

这让我想起了一个关于一名初级程序员的故事,他被告知要实施计算保险福利的规则,其中“18岁以上和65岁以上的所有人”没有资格。所以他将其编码为:

if (age < 18 and age > 65) ...

故事说他的同事一再试图说服他的逻辑不正确,但他固执地拒绝理解或改变它。