委托关键字与 lambda 表示法

delegate keyword vs. lambda notation(委托关键字与 lambda 表示法)
本文介绍了委托关键字与 lambda 表示法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一经编译,有没有区别:

Once it is compiled, is there a difference between:

delegate { x = 0; }

() => { x = 0 }

?

推荐答案

简答:没有.

可能不相关的较长答案:

Longer answer that may not be relevant:

  • 如果将 lambda 分配给委托类型(例如 FuncAction),您将获得匿名委托.
  • 如果将 lambda 分配给 Expression 类型,您将获得表达式树而不是匿名委托.然后可以将表达式树编译为匿名委托.
  • If you assign the lambda to a delegate type (such as Func or Action) you'll get an anonymous delegate.
  • If you assign the lambda to an Expression type, you'll get an expression tree instead of a anonymous delegate. The expression tree can then be compiled to an anonymous delegate.

这是表达式的一些链接.

Here's some links for Expressions.

  • System.Linq.Expression.Expression(TDelegate)(开始在这里).
  • Linq in-memory with delegates(例如 System.Func)使用 System.Linq.Enumerable.带有表达式的 Linq to SQL(和其他任何东西)使用 System.Linq.可查询.查看这些方法的参数.
  • 一个解释来自 ScottGu.简而言之,Linq in-memory 会产生一些匿名方法来解决您的查询.Linq to SQL 将生成一个表示查询的表达式树,然后将该树转换为 T-SQL.Linq to Entities 将生成一个表示查询的表达式树,然后将该树转换为适合平台的 SQL.
  • System.Linq.Expression.Expression(TDelegate) (start here).
  • Linq in-memory with delegates (such as System.Func) uses System.Linq.Enumerable. Linq to SQL (and anything else) with expressions uses System.Linq.Queryable. Check out the parameters on those methods.
  • An Explanation from ScottGu. In a nutshell, Linq in-memory will produce some anonymous methods to resolve your query. Linq to SQL will produce an expression tree that represents the query and then translate that tree into T-SQL. Linq to Entities will produce an expression tree that represents the query and then translate that tree into platform appropriate SQL.

这篇关于委托关键字与 lambda 表示法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How to pass lambda #39;include#39; with multiple levels in Entity Framework Core?(如何在 Entity Framework Core 中传递具有多个级别的 lambda include?)
Join/Where with LINQ and Lambda(使用 LINQ 和 Lambda 加入/在哪里)
Getting all types that implement an interface(获取所有实现接口的类型)
Combining two expressions (Expressionlt;Funclt;T, boolgt;gt;)(组合两个表达式 (ExpressionFuncT, boolgt;))
Is there a reason for C##39;s reuse of the variable in a foreach?(C# 在 foreach 中重用变量是否有原因?)
Lambda/Linq with Contains criteria for multiple keywords(Lambda/LINQ WITH包含多个关键字的条件)