抱歉,我想不出一个更好的方式来表达我的问题所以它可能是重复的。我提前道歉。通常情况下,我会自己测试一下,但我目前正处于无法编程的工作站上。
假设我们有以下代码
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?
答案 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。如果第一个条件没有通过,则无需检查第二个条件。
然而,运营商'&'除了它调用两个函数外,几乎完全一样。