何时使用或不使用Lambda表达式

时间:2009-11-11 01:46:40

标签: c# .net vb.net delegates lambda

我看到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的表达,只是想听听关于如何以及何时使用它们的一些建议。

1 个答案:

答案 0 :(得分:7)

这里有两个问题。

首先,对于您的示例,使用lambda与使用匿名委托语法。编译器生成的代码将是相同的,因此它不会归结为性能差异,而是可读性差异。

就个人而言,我发现lambda语法很容易理解。我发现lambda语法几乎总是比匿名委托语法更清晰,更简洁,更容易理解,所以我几乎总是喜欢它。

至于在整个代码中使用lambda表达式 - 就个人而言,我是一个相当重的用户。我发现它们通常比定义了许多方法更容易。如果一段代码不会被任何其他方法重用(它只会被调用并存在于一个地方),我将使用lambda来表达它。

如果一段代码将被多次使用,则应将其拉出(非匿名)方法。此外,如果一段代码是可以而且应该测试的东西,我倾向于为它制作一个方法,因为这样可以简化可测试性。