ラムダ式は無名関数、つまり名前のない関数を書く方法です。「矢印」の左側にあるのが関数のパラメータで、右側にあるのが関数本体です。したがって、(x => x.Name)
論理的にstring Function(Data x) { return x.Name }
はタイプのようなものに変換されstring
、Data
明らかに変化し、コンテキストから派生します。
左側のパラメーターがないことは、パラメーターのない関数に変換されるため、これは(() => someVariable)
論理的に次のように変換されます。string Function() { return someVariable; }
この時点で、どこsomeVariable
から来たのか疑問に思うかもしれませんが、これは関数パラメーターではなく、関数で定義されていません。あなたは正しいでしょう、このような関数は決してコンパイルされません。ただし、このようなラムダ関数は、外部スコープの変数をこのように持ち上げて使用できるため、まったく問題ありません。(内部的に、ラムダ式で使用される変数がフィールドになるラッパー クラスが作成されます。)
では、どういうmodel => item.FirstName
意味か見てみましょう。論理的には に変換されstring Function(Model model) { return item.FirstName; }
ます。基本的にこれはパラメータを持つ関数ですが、このパラメータは使用されません。
では、最後の情報です。ラムダ式は最終的には関数を表しますが、実際に実行されることを目的として作成されていない場合があります (可能性はありますが)。ラムダ式は、式ツリーの形式で表すことができます。これは、実行する代わりに解析できることを意味します。
この特定のケースでは、MVC エンジンは、ラムダ式が表す関数を実行しません。代わりに、MVC エンジンがこの特定の行に対して出力する html を認識できるように、式が解析されます。データ項目がモデル オブジェクトから直接取得されていない場合、ラムダ式の左側の部分は重要ではありません。