在 C# 中,是否保证表达式从左到右计算?
例如:
myClass = GetClass();
if (myClass == null || myClass.Property > 0)
continue;
是否存在不符合规定的语言?
您实际上指的是一种称为“短路逻辑表达式”的语言功能:
这意味着:当逻辑表达式的结果不能再改变时,例如当很明显表达式无论如何都会计算为“true”或“false”时,表达式的其余部分将不会被计算。
例如,C#、Java 或 JavaScript 可以做到这一点,您可以在这些语言中依赖它(来回答您的问题)。
在您的情况下,如果 MyClass 不为空:
-
MyClass == null
评估结果为假
- 由于它是一个“或”表达式,第二部分仍然可以改变结果,所以它被评估
-
myClass.Property > 0
决定了最终的结果
如果 MyClass 为空:
-
MyClass == null
评估结果为真
- 因为它是一个“或”表达式,所以后面的内容并不重要
- 不再进行评估,最终结果为真
有些语言不会短路逻辑表达式。经典 VB 就是一个例子,如果 MyClass 为 null(在 VB 中称为“Nothing”),则“myClass.Property > 0”将被评估并产生错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)