Difference between Func<> with delegate and lambda expression [duplicate]

て烟熏妆下的殇ゞ 提交于 2019-11-29 08:05:30

问题


This question already has an answer here:

  • delegate keyword vs. lambda notation 6 answers

while deepening myself to more advanced features of C#, I came across some code, which I didn't exactly know the difference of. It's about these two lines:

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

and

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

This can be used in the same way:

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

So basically.. What is the difference of these two lines? And are these lines compiling to the same CIL?


回答1:


They're the same, basically. They're both anonymous functions in C# specification terminology.

Lambda expressions are generally more concise, and can also be converted to expression trees, which are crucial for out-of-process LINQ.

Anonymous methods allow you to drop the parameter list if you don't care. For example:

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

Given how rarely the latter point is required, anonymous methods are becoming an endangered species in modern C#. Lambda expressions are much more common.




回答2:


So basically.. What is the difference of these two lines? And are these lines compiling to the same CIL?

There's just two different ways to write the same thing. The lambda syntax is newer and more concise, but they do the same thing (in this case).

Note that lambdas (=> syntax) can also be used to form Expression Lambdas, where you make an Expression Tree instead of a delegate. This is nice since you can use the same syntax whether you're using LINQ to Objects (which is based around delegates like Func<T, TResult>) or LINQ to Entities (which uses IQueryable<T> and expression trees).



来源:https://stackoverflow.com/questions/12267280/difference-between-func-with-delegate-and-lambda-expression

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!