C#:编译器优化,函数调用和布尔表达式短路

时间:2018-08-06 22:24:48

标签: c# optimization short-circuiting boolean-operations

让我们假设我们具有以下昂贵的功能:

bool ExpensiveOp1() { ... }
bool ExpensiveOp2() { ... }
bool ExpensiveOp3() { ... }

为简单起见,假设它们都没有副作用。

我知道,如果ExpensiveOp1ExpensiveOp2在以下表达式中返回false,C#可能会短路:

return ExpensiveOp1() && ExpensiveOp2() && ExpensiveOp3();

但是,如果我以这种方式编写代码,编译器是否足够聪明(由于缺乏更好的术语)内联函数调用并利用短路优势?

var x = ExpensiveOp1();
var y = ExpensiveOp2();
var z = ExpensiveOp3();
return x && y && z;

1 个答案:

答案 0 :(得分:5)

不,并且有充分的理由。编译器不知道您的任何操作是否有副作用,因此,如果您在布尔型短路情况之外运行它们,则会在出现所需副作用的情况下运行它们。