デリゲート呼び出し: ラムダ表記とデリゲート キーワード
C# では、ラムダ式とデリゲート キーワードにより、匿名メソッドを作成するための代替構文が提供されます。コンパイル後、次の 2 つの表記法の間に明らかな違いはありますか?
delegate { x = 0; }
ログイン後にコピー
と
() => { x = 0; }
ログイン後にコピー
答え: 機能的な違いはありません
バイナリ レベルでは、ラムダ表記とデリゲート キーワードの両方が同等の匿名デリゲートを生成します。これらは互換的に呼び出すことができ、同じ実行時の動作を示します。
追加の考慮事項:
- ラムダをデリゲート型 (Func や Action など) に割り当てる場合
- 一方、ラムダを Expression 型に代入すると、匿名デリゲートの代わりに式ツリーが生成されます。この式ツリーは、後でコンパイルして匿名デリゲートを作成できます。
式ツリーと LINQ:
LINQ のコンテキストでは、式ツリーを理解することが重要です。 。メモリ内の LINQ 操作 (Enumerable など) はデリゲートを使用しますが、外部データ ソース (SQL など) での LINQ 操作は式ツリーを利用します。
式ツリーの詳細とリソースについては、次のリンクを参照してください。 :
- [System.Linq.Expression.Expression(TDelegate)](https://docs.microsoft.com/en-us/dotnet/api/system.linq.expressions.expression)
- [デリゲートを使用したメモリ内 Linq (System.Func) と式を使用した Linq to SQL (System.Linq.Queryable)](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- look-ahead-at-linq)
以上がラムダ表記と C# のデリゲート キーワードの間に機能的な違いはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。