具有函数的条件是否可以导致未到达的代码?

时间:2013-06-26 13:28:56

标签: c# if-statement unreachable-code

抱歉,我想不出一个更好的方式来表达我的问题所以它可能是重复的。我提前道歉。通常情况下,我会自己测试一下,但我目前正处于无法编程的工作站上。

假设我们有以下代码

public void testFunctions()
{
    if(someFunction1() && someFunction2())
    {
        Console.WriteLine("I will never get here.");
    }
}

private bool someFunction1()
{
    Console.Write("Obviously I got here");
    return false;
}

private bool someFunction2()
{
    Console.WriteLine(", but will I ever get here?");
    return false;
}    

当我调用testFunctions时输出是什么?

Obviously I got here

或者:

Obviously I got here, but will I ever get here?

3 个答案:

答案 0 :(得分:2)

我认为您基本上是在询问&& 短路。它确实 - 如果第一个值评估为false,则不评估第二个操作数。这是由语言规范保证的。从C#5规范的第7.12节开始:

  

&&||运算符是&|运算符的条件版本:

     
      
  • 操作x && y对应于操作x & y,但仅当y不是x时才评估false
  •   
  • 操作x || y对应于操作x | y,但仅当y不是x时才评估true
  •   

(为了完整性,我添加了关于||的部分。)

答案 1 :(得分:1)

第一个将被显示(“显然我到了这里”)。当您的第一个方法返回false时,将不会评估if语句中的第二部分。如果它是一个或表达式,则将评估第二部分,并将第二个输出显示在屏幕上。

答案 2 :(得分:1)

这将是

  

“显然我来到了这里”

为什么?

这非常简单:运营商'&&'要求两个结果都为真,以便返回true。如果第一个条件没有通过,则无需检查第二个条件。

然而,运营商'&'除了它调用两个函数外,几乎完全一样。