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

Pass function as parameters vs setting a variable and passing it

我敢打赌这个问题以前有人问过,但我真的找不到我要找的东西,所以提前打扰一下:)

这两者之间有区别吗(从编程上讲或从开销上讲):

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

还有这个:

GetAllData(GetProducts());

这两种方法的优缺点是什么?是否有更多 elegant/right 的实现方式(比如 Func<>)?

提前致谢, 罗腾

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

无论如何,编译器都会将它们优化成同一个CIL,所以这不是效率问题。这完全取决于偏好。

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

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

关于可维护性,我想你会发现变量越少越有利于​​以后的维护。您不太可能遇到与副作用或改变假设相关的错误。在其他语言中,您可以使用 constfinal 等结构来使用编译器来帮助防止代码腐烂,但我仍然认为代码行越少越干净。

希望对您有所帮助!