【发布时间】:2009-11-11 01:46:39
【问题描述】:
我看到 lambda 表达式在语言的某些方面已经成为一个非常有用的工具。我一直在使用它们,大多数时候它们非常适合并且使代码更短,也许更清晰。
现在.. 我见过一些,我会说过度使用它们。有些人非常喜欢它们,以至于试图在任何地方使用它们。有时 C# 代码看起来像一种函数式语言。
其他不利因素是使用 lambda 反射的成本以及对调试不友好。
我想听听关于使用或多或少的 lambda 表达式的好处和代码清晰程度的意见。
(这不是更好的例子,但假设它是触发器)
我正在编写以下代码。使用delegate { return null; } 可以帮助我避免每次必须使用它时都询问事件是否为空。
public delegate ContactCellInfo.Guest AddGuest();
public event AddGuest GuestRequest = delegate { return null;}
我正在使用 resharper 和明智的 resharper(即使有时它确实会吃掉内存)给了我以下建议
public delegate ContactCellInfo.Guest AddGuest();
public event AddGuest GuestRequest = () => null;
在我看来,使用委托的代码看起来更清晰。我并不反对 lamdba 表达,只是想听听一些关于如何以及何时使用它们的建议。
【问题讨论】:
-
提示:您不必从您的委托人那里返回 null。一个空的委托就可以了。
-
“使用 lambda 反射的成本”:没有成本。您代码中的 lambda 完全 等效于匿名方法。 (Lambda 也可以用作 LINQ 意义上的表达式;但在这种情况下没有比较的意义,因为匿名方法不能用作表达式。)
-
我使用空委托,但在这种情况下,它会给出错误“并非所有代码路径都在匿名方法中返回值...”
-
“其他不利因素是使用 lambda 反射的成本以及对调试不友好的成本。”你能解释一下你的意思吗?
-
@itowlson 我知道在这种情况下使用反射是没有成本的,我说的是它们的一般用途。
标签: c# .net vb.net delegates lambda