【发布时间】:2018-08-06 22:24:48
【问题描述】:
假设我们有以下昂贵的函数:
bool ExpensiveOp1() { ... }
bool ExpensiveOp2() { ... }
bool ExpensiveOp3() { ... }
另外,为了简单起见,假设它们都没有副作用。
我知道如果ExpensiveOp1 或ExpensiveOp2 在以下表达式中返回false,C# 会短路:
return ExpensiveOp1() && ExpensiveOp2() && ExpensiveOp3();
但是,如果我以这种方式编写代码,编译器是否足够聪明(因为没有更好的术语)内联函数调用并利用短路?
var x = ExpensiveOp1();
var y = ExpensiveOp2();
var z = ExpensiveOp3();
return x && y && z;
【问题讨论】:
-
如果你真的被打扰了,你可以去
var x = ExpensiveOp1; var y = ExpensiveOp2; var z = ExpensiveOp3; return x() && y() && z();。 -
谢谢,@JohanP。我可能最终会用本地函数做类似的事情。我总结了我的例子以消除不相关的细节。我实际上将长布尔表达式的结果分配给
x、y和z。我可以将它们封装在短名称的本地函数中,并将它们放在return语句中。 -
谨防优先考虑微优化...
-
@Abion47,承认并同意。只是好奇以防它成为一个问题。
标签: c# optimization short-circuiting boolean-operations