小编典典

委托关键字与 lambda 表示法

all

编译后,两者之间是否有区别:

delegate { x = 0; }

() => { x = 0 }

?


阅读 125

收藏
2022-07-28

共1个答案

小编典典

简短的回答:不。

可能不相关的更长答案:

  • 如果将 lambda 分配给委托类型(例如FuncAction),您将获得匿名委托。
  • 如果将 lambda 分配给 Expression 类型,您将获得表达式树而不是匿名委托。然后可以将表达式树编译为匿名委托。

编辑:这是表达式的一些链接。

  • System.Linq.Expression.Expression(TDelegate)(从这里开始)。
  • 带有委托(例如 System.Func)的 Linq in-memory 使用System.Linq.Enumerable。带有表达式的 Linq to SQL(以及其他任何东西)使用System.Linq.Queryable。查看这些方法的参数。
  • ScottGu的解释。简而言之,Linq in-memory 会产生一些匿名方法来解决您的查询。Linq to SQL 将生成一个表示查询的表达式树,然后将该树转换为 T-SQL。Linq to Entities 将生成一个表示查询的表达式树,然后将该树转换为适合平台的 SQL。
2022-07-28