日期:2014-05-16  浏览次数:20863 次

有了lambda以后,是不是就可以不用Func<>模板了?
lambda是不是可以完全替代Func<>模板?
------解决方案--------------------
完全是没什么关系的东西。

Func<T>和Action的一系列泛型定义都是一种类型。
而lambda表达式只是一种语法形式而已。
二者没有必然的联系,更谈不上谁取代谁。

比如你想定一个Func<T>的属性,这跟lambda表达式没有任何关系。
------解决方案--------------------
没有必然联系,不要混淆
------解决方案--------------------
lmada只是个语法糖而已
------解决方案--------------------
Func泛型完全是为了简化你的代码而设置的。

没有它,你需要定义很多委托类型。而Func泛型相当于内置了一些类型(从1个参数到15个参数)

Lambda一方面可以简化定义匿名委托的语法,另一方面,C#编译器可以将单表达式的Lambda编译为表达式树。

注意,一个是简化了委托类型的定义。一个是简化了委托匿名函数的定义。两个根本不是一码事,不存在谁代替谁的问题。
------解决方案--------------------
这个,只要F12看看Action<>, Func<>的定义就很容易理解了
public delegate void Action<T>(T obj);
public delegate TResult Func<TResult>();
Action<>, Func<>都是Delegate类型
而Lambda,引用楼上q107770540的话,语法糖而已。

你总不能说有了匿名函数,就不需要函数了。
给你一个包裹,你不要里面的东西,只要包装,是没有意义的。

当然,从另一个角度来说,Action<>, Func<>都是Delegate的包装,如果你愿意,可以抛弃Action<>, Func<>,而只保留Delegate,这个是没有问题的,就相当于你拿到了包裹里的东西,而扔掉了包装一样。没有什么损失,只是你不嫌麻烦的话。