我开始学习C#,在阅读逻辑运算符时,我发现:
|| operator表示逻辑运算符,如果表达式1为TRUE,则不计算表达式2。我很好奇这个例子:
int x = 5, y = 10;
bool result;
result = (x == 3) || (y != 5);
label12.Text = result.ToString();
如果我们已经知道X的值是5,那么结果(x == 3)如何返回true?因为在这种情况下左侧操作符返回TRUE。但是怎么样? X = 5,它应该是X == 5 ???我误解了什么?有人可以用几句话来解释我吗?
非常感谢并提前感谢
答案 0 :(得分:3)
短路操作意味着这里
result = (x == 3) || (y != 5);
如果y != 5
已经为真,则不会评估 x == 3
部分。基本上因为没有必要 - 我们已经知道整个表达都是真的。
如果x为5,则会评估两个表达式,因为我们仍然不知道x == 3
之后的整个结果。
更新。使用此示例可能会更清楚这一点的目的。考虑以下,当然简化,代码:
var someObj = SomeOperation();
if (someObj != null && someObj.IsActive)
如果SomeOperation()
返回null,会发生什么?如果不对此逻辑语句进行短路评估,则此代码将抛出NullReferenceException
。但是,如果IsActive
为空,则不会调用someObj
调用。
答案 1 :(得分:1)
它是一个或。左侧是假的,所以它评估右侧,这是真的。
答案 2 :(得分:1)
短路评估意味着当编译器确定整个表达式的结果时,编译器会立即停止评估表达式
在您的情况下,当编译器发现表达式x==3
为false时,它无法停止评估,因为表达式的第二部分可能为true。
所以它被迫继续评估,它发现表达式y != 5
为真,整个表达式变为FALSE || TRUE
答案 3 :(得分:1)
让我们分解......
int x = 5, y = 10;
result = (x == 3) || (y != 5);
(x==3)
是假的
(y!=5)
是真的
由于您使用了 ||
,条件(x==3)
的第一部分为false,因此我们需要继续评估任何其他条件以确定整体表达式是true还是false ......如果第一个表达式为真,我们可以在那里停止,因为整个表达式不会随着持续评估而改变,条件的第二部分将被“短路”。
在这种情况下,必须评估(y!=5)
,它返回true并使表达式的其余部分为真。
如果您使用 &&
来合并条件,那么如果任何一方为假,则整个表达式为false。
int x = 5, y = 10;
result = (x == 3) && (y != 5);
由于在这种情况下(x==3)
为false,因此不需要进行其他评估,并且在不评估(y!=5)
答案 4 :(得分:0)
(x == 3)不应评估为True。 (x == 3)计算结果为False,因此(y!= 5)得到评估,这是真的。这就是为什么结果是真的。