与委托和lambda表达式函数功能<>之间的差值[复制](Difference betw

2019-06-27 19:41发布

这个问题已经在这里有一个答案:

  • 委托关键字与拉姆达符号 6个回答

同时加深自己的C#更先进的功能,我遇到了一些代码,但我并不确切知道的差异。 这是关于这两条线:

Func<string, int> giveLength = (text => text.Length);

Func<string, int> giveLength = delegate(string text) { return text.Length; };

这可以以同样的方式被使用:

Console.WriteLine(giveLength("A random string."));

所以基本上..是什么这两条线的区别? 并且这些线路编译到同一CIL?

Answer 1:

它们是相同的,基本上是这样。 他们在C#规范术语匿名函数

Lambda表达式通常更简洁,并且也可以被转化到表达式树 ,这对于处理外的LINQ至关重要。

匿名方法允许你放弃参数列表,如果你不关心。 例如:

EventHandler handler = delegate { 
    Console.WriteLine("Sender and args don't matter");
};

由于是怎么很少需要后一点,匿名方法正在成为现代C#中的濒危物种。 Lambda表达式更为常见。



Answer 2:

所以基本上..是什么这两条线的区别? 并且这些线路编译到同一CIL?

只是有两种不同的方式来写同样的事情。 拉姆达语法是更新,更简洁,但他们做同样的事情(在这种情况下)。

需要注意的是lambda表达式( =>语法),也可用于形成表达lambda表达式 ,在何处进行表达式树 ,而不是委托。 这是很好的,因为你可以使用相同的语法无论你是使用LINQ to对象(这是基于周围像代表Func<T, TResult>或LINQ到实体(它使用IQueryable<T>和表达式树)。



文章来源: Difference between Func<> with delegate and lambda expression [duplicate]