ラムダ式とデリゲート型: 違いの詳細
C# では、ラムダ式とデリゲート キーワードは、匿名メソッドを表すための同様の機能を提供します。ただし、重要な疑問が生じます: コンパイル時にこれら 2 つの表記法の間に識別可能な違いはありますか?
短い答え: 目立った違いはありません
ラムダ式が次の方法で記述されているかどうか構文デリゲート { x = 0; } または省略表現 () => { x = 0 } の場合、コンパイラは両方を同等の匿名デリゲートにコンパイルします。
詳しい説明
短い答えは明確ですが、特定のシナリオではわずかなバリエーションが存在します。 。ラムダ式がデリゲートの種類 (Func や Action など) に割り当てられている場合、匿名のデリゲートが作成されます。ただし、ラムダ式が式の型に割り当てられている場合は、匿名デリゲートではなく式ツリーが生成されます。この式ツリーは、必要に応じて匿名デリゲートにさらにコンパイルできます。
LINQ 実装の違い
統合言語クエリ (LINQ) のコンテキストでは、デリゲートの型 (System.Func) と式の型 (System.Linq.Queryable) は異なります。 LINQ のメモリ内操作は、匿名メソッドで動作する System.Linq.Enumerable を利用します。逆に、LINQ to SQL および同様の実装では式ツリーが使用され、プラットフォーム固有の SQL に変換されます。
以上がラムダ式とデリゲート型: コンパイル時は本当に違いますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。