完全是没什么关系的东西。Func<T>和Action的一系列泛型定义都是一种类型。
而lambda表达式只是一种语法形式而已。
二者没有必然的联系,更谈不上谁取代谁。比如你想定一个Func<T>的属性,这跟lambda表达式没有任何关系。

解决方案 »

  1.   

    Func泛型完全是为了简化你的代码而设置的。没有它,你需要定义很多委托类型。而Func泛型相当于内置了一些类型(从1个参数到15个参数)Lambda一方面可以简化定义匿名委托的语法,另一方面,C#编译器可以将单表达式的Lambda编译为表达式树。注意,一个是简化了委托类型的定义。一个是简化了委托匿名函数的定义。两个根本不是一码事,不存在谁代替谁的问题。
      

  2.   

    这个,只要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,这个是没有问题的,就相当于你拿到了包裹里的东西,而扔掉了包装一样。没有什么损失,只是你不嫌麻烦的话。