在一个IF语句中测试两个条件

时间:2014-02-06 16:01:15

标签: c#

我意识到这就像Hello World级别的问题,但我不得不问。这两个条件可以简化为一个if形态吗?

bool isChecked = false;

if(Request["foo"] != null) // Check box
      isChecked = (Request["foo"].ToLower() == "on");

if (!isChecked)
      // do stuff

单独地,我在两个实例中都是正确的,但是当我将它们添加到与if结合的一个&&语句中时,我得不到相同的结果。

if(Request["foo"] != null && (Request["foo"].ToLower() == "on"))
          // do stuff

4 个答案:

答案 0 :(得分:2)

如果您按步骤简化逻辑,则更容易遵循逻辑...

首先,您可以按如下方式缩短isChecked的分配:

bool isChecked = Request["foo"] != null && Request["foo"].ToLower() == "on";

if (!isChecked)
      // do stuff

然后我们只需要摆脱isChecked变量,这可以通过简单的交换完成:

if (!(Request["foo"] != null && Request["foo"].ToLower() == "on"))
      // do stuff

这使得阅读和理解变得有点困难,所以让我们进一步简化它。假设我们有“如果请求[”foo“]未设置为”执行某些操作的规则“(这基本上就是您原来的逻辑所做的那样),那么我们可以这样做:

if (Request["foo"] == null || Request["foo"].ToLower() != "on"))
      // do stuff

答案 1 :(得分:1)

你做!isChecked,这与你测试的不同。试试这个:

 if(Request["foo"] != null && !(Request["foo"].ToLower() == "on"))

答案 2 :(得分:1)

您正在检查!isChecked,因此您的代码应为此

        if (!((Request["foo"] != null) && (Request["foo"].ToLower() == "on")))
        {
            // Do Stuff
        }

通过反转所有检查和&&

,可以分发和简化not
        if ((Request["foo"] == null) || (Request["foo"].ToLower() != "on"))
        {
            // Do Stuff
        }

答案 3 :(得分:1)

您可以将两个测试合并到:

bool isChecked = Request["foo"] != null && Request["foo"].ToLower() == "on";

您也可以在if语句的谓词中使用它们。您可以这样做的原因是在C#中&&||运算符“短路”。这意味着如果可以从左侧确定整个表达式的值,则不评估右侧。这很重要,因为在Request["foo"]null的情况下,如果评估了右侧,则会得到空引用异常。在&&||左侧测试null是所有C语言中非常常见的习惯用法。