5 c# language-agnostic compiler-construction expression expression-evaluation
在C#中,是否保证表达式从左到右进行求值?
例如:
myClass = GetClass();
if (myClass == null || myClass.Property > 0)
continue;
Run Code Online (Sandbox Code Playgroud)
有没有不符合的语言?
Tom*_*lak 14
您实际上是指一种称为"短路逻辑表达式"的语言功能:
这意味着:当逻辑表达式的结果不再发生变化时,例如,当表达式无论如何都将评估为"真"或"假"时,表达式的剩余部分将不会被评估.
例如,C#,Java或JavaScript就是这样做的,你可以用这些语言来依赖它(回答你的问题).
在您的情况下,如果MyClass不为null:
MyClass == null
评估为假myClass.Property > 0
确定最终结果如果MyClass为null:
MyClass == null
评估为真有些语言不会使逻辑表达式短路.经典VB就是一个例子,如果MyClass为null(在VB中称为"Nothing"),将评估"myClass.Property> 0",并产生错误.
C#3.0规范的第7.11节描述了短路:
操作x || y对应于操作x | y,除了仅在x不为真时才计算y.
是的,你很好.
至于其他语言 - 我从不喜欢说所有语言.在VB.NET中,你可以使用OrElse和AndAlso,它们是短路的,但是普通的Or和And不是.