3

我对 C# 中的 lambda 表达式很陌生,我倾向于不使用它们,因为我不知道最小化代码之外的好处是什么。它们在某些/所有情况下效率更高吗?或者除了将更多代码放在一行中之外,他们还能实现什么奇妙的事情?

4

2 回答 2

10

它们在某些/所有情况下效率更高吗?

一般来说,Lambda 表达式与性能效率的关系不如开发人员的效率。

它们是一种以比手工编写方法更有成效的方式创建方法的方法。话虽如此,他们对(直接)提高性能没有任何作用。

但是,通过正确利用以功能方式工作的框架(即:使用 LINQ),您可以增加编写高效代码的可能性,因为框架本身可能已经高度优化。

于 2012-08-27T23:42:38.093 回答
5

Lambda 表达式并没有更高的性能,它们只是更简单。它们主要用于:

  • 创建委托
  • 为 LINQ 创建表达式
  • 将局部变量放入代表的捕获中

创建委托时,编译器创建的代码就像您创建了一个命名方法并获得该方法的委托一样。

Func<int, int> mul = n => n * 2;

相比:

public static int Mul(int n) {
  return n * 2;
}

Func<int, int> = Mul;

创建表达式时,编译器会创建一个表达式树,可以将其转换为委托或由 LINQ 提供程序使用以转换为其他内容。例如,Linq To Sql 提供程序会将表达式转换为 SQL 代码。

在创建使用在创建委托的方法中声明的局部变量的委托时,会在该变量所在的位置自动创建一个闭包对象,而不是将变量放在堆栈上。这类似于通过将变量设置为声明该方法的类中的字段来使该变量可用于命名方法。

int x = 2;
Func<int, int> mul = n => n * x;

相比:

public class Closure {

  public int x;

  public int Mul(int n) {
    return n * x;
  }

}

Closure c = new Closure;
c.x = 2;

Func<int, int> mul = x.Mul;
于 2012-08-27T23:49:28.253 回答