c# - 从左到右的表达式评估

标签 c# language-agnostic compiler-construction expression expression-evaluation

在 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/

相关文章:

c# - 从数据库中删除记录时如何解决 Linq to SQL ChangeConflictException

c# - HTTP 错误 502.5 - 从 Visual Studio 运行应用程序时进程失败

c# - 在 C# 代码后面的 LIKE SQl 查询中转义单引号

language-agnostic - 完全限定类名的反义词是什么?

language-agnostic - 用于绘制几何图的语言或包

c - 16 位机器上可以使用 32 位整数吗?

c# - 从 ADO.Net 执行 DBCC 命令

algorithm - 产生常数模 2 的幂的乘法链

c - Visual Studio 6使用的c编译器是什么?

c++ - 设置 iOS 项目以使用 eigen