我对C#中的lambda表达式很新,我倾向于不使用它们,因为我不知道最小化代码的好处是什么。它们在某些/所有情况下都更有效吗?或者除了将更多代码放在一行之外,还有什么奇妙的东西可以实现吗?
答案 0 :(得分:10)
它们在某些/所有情况下是否更有效?
Lambda表达式通常与性能效率无关,与开发人员效率无关。
与手工编写方法相比,它们是一种以更高效的方式创建方法的方法。话虽如此,他们没有(直接)改善表现。
但是,通过正确使用以功能方式工作的框架(即:使用LINQ),可以增加编写高效代码的可能性,因为框架本身可能已经过高度优化。
答案 1 :(得分:5)
Lambda表达式不是更高效,它们更简单。它们主要用于:
创建委托时,编译器创建的代码就像你创建了一个命名方法一样,并获得了该方法的委托。
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;