lambda实际上是匿名方法。匿名方法意味着,不能直接调用,必须赋值或以参数形式传参。这就决定了,它充当临时工。如果想要重用这部分lambda表达式的操作,就必须将它赋值给委托。
很多时候lambda表达式多用在委托参数上,就是临时处理。
函数参数是代理类型的才允许lambda传参
//函数声明,参数为delegate类型
void Func(System.Action act){
act();
}
void Func(System.Action<float> act){
act();
}
调用:
Func (() => {
});
Func (speed => {
Log.log("speed:"+speed);
});
无返回值的lambda操作处理和函数本身的处理没有关系,仅仅是启动这个代理所要做的处理。
如果是有返回值的,则它的返回值,是由上下文自动识别的。
void Func(System.Func<bool> act){
Log.log ("act="+act());
}
Func (() => true);
有返回值如Func<T,TResult>带有返回值类型的参数,在函数体内调用该返回值参数,即代理是有返回值的情况下才会对函数体有影响。
目前我接触的大多数情况都是不带返回值的代理,即直接回调处理结果。
举例:
比较大小的操作
delegate int max(int a,int b);
max = (a,b)=> a > b ? a:b;
赋值以备用,代码简单明了。