我已经快速阅读了Microsoft Lambda表达式文档。
不过,这样的例子帮助我更好地理解:
delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
不过,我还是不明白为什么这是一种创新。它只是一个在“方法变量”结束时死亡的方法,对吧?为什么我要用这个而不是真正的方法?
我已经快速阅读了Microsoft Lambda表达式文档。
不过,这样的例子帮助我更好地理解:
delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
不过,我还是不明白为什么这是一种创新。它只是一个在“方法变量”结束时死亡的方法,对吧?为什么我要用这个而不是真正的方法?
当前回答
Lambda表达式是表示匿名方法的一种简洁方式。匿名方法和Lambda表达式都允许您内联定义方法实现,但是,匿名方法显式地要求您定义方法的参数类型和返回类型。Lambda表达式使用c# 3.0的类型推断特性,该特性允许编译器根据上下文推断变量的类型。这是非常方便的,因为这节省了我们大量的输入!
其他回答
在c#中,我们不能像在JavaScript中那样将函数作为参数传递。解决方法是使用委托。
当我们想参数化行为而不是值时,我们使用委托。Lambdas是编写委托的实用语法,可以很容易地将行为作为函数传递。
您还可以在编写作用于方法的泛型代码时使用lambda表达式。
例如:计算方法调用所花费的时间的泛型函数。(即这里的动作)
public static long Measure(Action action)
{
Stopwatch sw = new Stopwatch();
sw.Start();
action();
sw.Stop();
return sw.ElapsedMilliseconds;
}
你可以使用lambda表达式调用上述方法,如下所示,
var timeTaken = Measure(() => yourMethod(param));
表达式允许您从方法和out参数中获取返回值
var timeTaken = Measure(() => returnValue = yourMethod(param, out outParam));
Lambda清理了c# 2.0的匿名委托语法…例如
Strings.Find(s => s == "hello");
在c# 2.0中是这样完成的:
Strings.Find(delegate(String s) { return s == "hello"; });
在功能上,它们做的是完全相同的事情,只是语法更简洁。
lambda表达式就像代替委托实例编写的匿名方法。
delegate int MyDelagate (int i);
MyDelagate delSquareFunction = x => x * x;
考虑lambda表达式x => x * x;
输入参数值为x(在=>的左边) 函数逻辑为x * x(在=>的右侧)
lambda表达式的代码可以是语句块,而不是表达式。
x => {return x * x;};
例子
注意:Func是一个预定义的泛型委托。
Console.WriteLine(MyMethod(x => "Hi " + x));
public static string MyMethod(Func<string, string> strategy)
{
return strategy("Lijo").ToString();
}
参考文献
委托和接口如何可以互换使用?
这可能是关于为什么使用lambda表达式的最好解释-> https://youtu.be/j9nj5dTo54Q
总之,这是为了提高代码的可读性,通过重用而不是复制代码来减少错误的机会,并利用发生在幕后的优化。