委托调用:Lambda 表示法与委托关键字
在 C# 中,lambda 表达式和委托关键字提供了用于创建匿名方法的替代语法。编译后,以下两种符号之间是否存在明显差异?
和
答案:没有功能差异
在二进制级别,lambda 表示法和 delegate 关键字都会生成等效的匿名委托。它们可以互换调用并表现出相同的运行时行为。
其他注意事项:
- 将 lambda 分配给委托类型(例如,Func 或 Action)时),直接创建匿名委托。
- 另一方面,将 lambda 分配给表达式类型会生成表达式树而不是匿名委托。随后可以编译此表达式树以创建匿名委托。
表达式树和 LINQ:
在 LINQ 上下文中,理解表达式树至关重要。内存中的 LINQ 操作(例如,使用 Enumerable)使用委托,而具有外部数据源(例如 SQL)的 LINQ 操作则使用表达式树。
有关表达式树的更多见解和资源,请参阅以下链接:
- [System.Linq.Expression.Expression(TDelegate)](https://docs.microsoft.com/en-us/dotnet/api/system.linq.expressions.expression)
- [带有委托 (System.Func) 的 Linq 内存与带有表达式 (System.Linq.Queryable) 的 Linq to SQL](https://stackoverflow.com/questions/9289889/linq-in-memory -with-delegates-system-func-vs-linq-to-sql-with-expressions-syst)
- [ScottGu 的解释](https://weblogs.asp.net/scottgu/a-向前看 linq)
以上是Lambda 表示法和 C# 中的 delegate 关键字之间有功能差异吗?的详细内容。更多信息请关注PHP中文网其他相关文章!