在 C# 中,是否保证表达式从左到右求值?
例如:
myClass = GetClass();
if (myClass == null || myClass.Property > 0)
continue;
有没有不符合的语言?
最佳答案
您实际上指的是一种称为“短路逻辑表达式”的语言功能:
这意味着:当逻辑表达式的结果不能再改变时,例如当很明显表达式无论如何都会计算为“真”或“假”时,表达式的其余部分将不会被计算。
例如,C#、Java 或 JavaScript 可以做到这一点,您可以在这些语言中依靠它(来回答您的问题)。
在你的例子中,如果 MyClass 不为空:
MyClass == null
计算结果为 false- 由于是“或”表达式,第二部分仍然可以改变结果,所以计算
myClass.Property > 0
决定最终结果
如果 MyClass 为空:
MyClass == null
计算结果为 true- 因为它是一个“或”表达式,所以后面的内容无关紧要
- 不再进行评估,最终结果为真
有些语言不会短路逻辑表达式。经典 VB 是一个示例,如果 MyClass 为 null(在 VB 中称为“Nothing”),此处“myClass.Property > 0”将被评估并产生错误。
关于c# - 从左到右的表达式评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/336755/