当前位置:  开发笔记 > 编程语言 > 正文

从左到右的表达评估

如何解决《从左到右的表达评估》经验,为你挑选了2个好方法。

在C#中,是否保证表达式从左到右进行求值?

例如:

myClass = GetClass();  
if (myClass == null || myClass.Property > 0)  
    continue;

有没有不符合的语言?



1> Tomalak..:

您实际上是指一种称为"短路逻辑表达式"的语言功能:

这意味着:当逻辑表达式的结果不再发生变化时,例如,当表达式无论如何都将评估为"真"或"假"时,表达式的剩余部分将不会被评估.

例如,C#,Java或JavaScript就是这样做的,你可以用这些语言来依赖它(回答你的问题).

在您的情况下,如果MyClass不为null:

MyClass == null 评估为假

因为它是一个"或"表达式,第二部分仍然可以改变结果,所以它被评估

myClass.Property > 0 确定最终结果

如果MyClass为null:

MyClass == null 评估为真

因为它是一个"或"表达式,所以后面的内容并不重要

不再进行评估,最终结果是真的

有些语言不会使逻辑表达式短路.经典VB就是一个例子,如果MyClass为null(在VB中称为"Nothing"),将评估"myClass.Property> 0",并产生错误.



2> Jon Skeet..:

C#3.0规范的第7.11节描述了短路:

操作x || y对应于操作x | y,除了仅在x不为真时才计算y.

是的,你很好.

至于其他语言 - 我从不喜欢说所有语言.在VB.NET中,你可以使用OrElse和AndAlso,它们是短路的,但是普通的Or和And不是.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有