LINQ vs Lambda vs Anonymous Methods vs Delegates

∥☆過路亽.° 提交于 2019-12-02 21:59:39

LINQ is a broad technology name covering a large chunk of .NET 3.5 and the C# 3.0 changes; "query in the language" and tons more.

A delegate is comparable to a function-pointer; a "method handle" as an object, if you like, i.e.

Func<int,int,int> add = (a,b) => a+b;

is a way of writing a delegate that I can then call. Delegates also underpin eventing and other callback approaches.

Anonymous methods are the 2.0 short-hand for creating delegate instances, for example:

someObj.SomeEvent += delegate {
    DoSomething();
};

they also introduced full closures into the language via "captured variables" (not shown above). C# 3.0 introduces lambdas, which can produce the same as anonymous methods:

someObj.SomeEvent += (s,a) => DoSomething();

but which can also be compiled into expression trees for full LINQ against (for example) a database. You can't run a delegate against SQL Server, for example! but:

IQueryable<MyData> source = ...
var filtered = source.Where(row => row.Name == "fred");

can be translated into SQL, as it is compiled into an expression tree (System.Linq.Expression).

So:

  • an anonymous method can be used to create a delegate
  • a lambda might be the same as an anon-method, but not necessarily

Although the title of this link is Anonymous methods it covers delegates, anonymous methods and lambda expressions.

LINQ Lambda Expressions anonymous methods delegates

those are the full explanations from MSDN, most with examples...

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