1. ホーム
  2. c#

[解決済み] delegateキーワードとlambda記法の比較

2022-04-14 02:56:33

質問

一度コンパイルしたものは、違いがあるのでしょうか。

delegate { x = 0; }

そして

() => { x = 0 }

?

解決方法は?

簡単に言うと、「いいえ」です。

関係ないかもしれませんが、長い回答です。

  • ラムダをデリゲート型に割り当てた場合(例えば Func または Action ) の場合、匿名デリゲートを取得することになります。
  • ラムダをExpression型に代入すると、匿名デリゲートの代わりに式木が得られます。 この式木は、匿名デリゲートにコンパイルすることができる。

編集する エクスプレッションに関するリンク集です。

  • System.Linq.Expression.Expression(TDelegate)の項参照。 (ここからスタート)。
  • デリゲート(System.Funcなど)を使用したLinqインメモリは、以下のようになります。 システム.Linq.Enumerable . 式による SQL への Linq (およびその他) は、以下を使用します。 システム.Linq.Queryable . これらのメソッドのパラメータを確認してください。
  • An ScottGuからの説明 . 簡単に言うと、Linqインメモリはクエリを解決するためにいくつかの匿名メソッドを生成します。 Linq to SQLはクエリを表現する式木を生成し、その式木をT-SQLに変換する。 Linq to Entitiesはクエリを表す式木を生成し、その式木をプラットフォームに適したSQLに変換する。