将函数作为参数传递与设置变量并传递它

时间:2018-04-26 13:15:38

标签: c# function overhead

我打赌之前已经问过这个问题,但我无法找到我想要的东西,所以请原谅我:)

在这之间存在差异(以编程方式说OR开销):

 var data = GetProducts();
 GetAllData(data);

和此:

GetAllData(GetProducts());

这两种方法的优点和缺点是什么?是否有一种更优雅/正确的方法来实现它(比如Func<>)?

提前谢谢, ROTEM

2 个答案:

答案 0 :(得分:2)

用两行代码可以更容易地进行调试,因为你可以在第二行中断并观察第一行分配的值。

编译器无论如何都会将它们优化到同一个CIL中,因此这不是效率问题。这都是一个偏好的问题。

答案 1 :(得分:0)

没有功能差异,当代码被翻译成机器语言(或JVM字节代码或其他)时,它将导致或多或少相同的低级代码。

主要区别在于(a)美学和(b)代码的可维护性。关于美学,有些人可能会争辩说第二种形式更漂亮。它主要是个人选择,但我认为,如果表达式不像GetProducts()那么简单,但是很长(例如GetContext().GetProductService().GetProductsFor(GetContext().GetCurrentUser())然后将其分解为两行中间变量更具可读性。

关于可维护性,我认为你会发现变量越少对于将来的维护总是更好。您不太可能遇到与副作用或改变假设有关的错误。在其他语言中,您可以使用constfinal等构造来使用编译器来帮助防止代码腐烂,但我仍然认为使用较少的代码行会更清晰。< / p>

希望这有帮助!