0

Sorry I couldn't think of a better way to formulate my question so it could be a duplicate. I appologize in advance. Normally I would test this myself but I am currently on a workstation where I can't program.

Say we have the following 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;
}    

What is the output going to be when I call testFunctions?

Obviously I got here

Or:

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

3 回答 3

2

我想你基本上是在问是否&& 短路。确实如此 - 如果第一个操作数的计算结果为false,则不计算第二个操作数。这是由语言规范保证的。从 C# 5 规范的第 7.12 节:

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

  • 操作x && y对应于操作x & y,除了仅在is noty时才评估。xfalse
  • 操作x || y对应于操作x | y,除了仅在is noty时才评估。xtrue

(为了完整起见,我包括了关于的部分||。)

于 2013-06-26T13:30:48.303 回答
1

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

于 2013-06-26T13:31:12.880 回答
1

这将是

“显然我来了”

为什么?

这很简单:运算符 '&&' 要求两个结果都为真,才能返回真。如果第一个条件尚未通过,则无需检查第二个条件。

然而,运算符 '&' 的作用几乎相同,只是它调用了这两个函数。

于 2013-06-26T13:31:45.980 回答