【发布时间】:2019-08-21 22:16:55
【问题描述】:
我们将使用一个简单的示例(我有一段更复杂的代码评估不正确)来尽可能清楚地说明这个问题。
我的问题是为什么在添加括号之前它的评估不正确?
我已经通过在速记条件周围添加括号解决了这个问题,找到问题只是很痛苦,因为它对我来说是正确的。
Console.WriteLine(false && true ? false : true);
预期结果:假。
实际结果:是的。
现在让我们添加括号:
Console.WriteLine(false && (true ? false : true));
预期结果:假。
实际结果:假。
在我看来,评估的第一部分是错误的,所以它甚至不应该费心评估 && 操作的后半部分。是什么导致了这种行为?
【问题讨论】:
-
&& 的优先级高于
?。 docs.microsoft.com/en-us/cpp/c-language/… -
要理解你的逻辑为什么会出错,想象一下代码是
Console.WriteLine(false && true ? "False1" : "True2");。您希望该代码向控制台写入什么以及为什么?&&并不意味着“如果false”,则不要在右边做任何其他事情。否则我的示例代码可以写一个字符串或布尔值(这显然是不可能的)。 -
您的期望并没有错。 false && true 评估为 false,并运行三元组的 false 侧,即 true。
标签: c#