入れ子になったジェネリック型パラメーターを持つクラス。
内側の部分:
Func<TModel, TProperty>
TModel
ジェネリック型を引数として取り、ジェネリック型の結果を返す関数を参照 (「記述」) するデリゲートTProperty
。
TProperty MyFunc(TModel model)
... への通常の引数の型に対応しますTextBoxFor()
:
model => model.Name
model
はタイプTModel
でmodel.Name
あり、タイプTProperty
です。
外側の部分:
Expression<T>
型のラムダ式 (デリゲート) を記述する式ツリーT
。ジェネリック クラスを使用すると、コードを実行した結果ではなく、実行時にコード自体Expression<T>
を (簡単に言えば) 調べることができます。つまり、このメソッドは、式をコンパイルして実行し、結果を取得するだけでなく、プロパティの実際の名前 (上記の例) を抽出することもできます。TextBoxFor()
Name
単純に aFunc<>
を引数として使用した場合、渡されたデリゲートを呼び出してその呼び出しの結果を取得することしかできず、この種の詳細を調べることはできません。
HTML ヘルパーの場合、式ツリーの使用は主にTextBox()
、プロパティの名前を文字列として受け取るメソッドのタイプ セーフな代替手段です。
したがって、組み合わせて:
Expression<Func<TModel, TProperty>>
そのパラメータは、「ジェネリック型のパラメータを取り、ジェネリック型のプロパティを返すTextBoxFor()
ラムダ式を記述する式ツリー」です。TModel
TProperty
入れ子になったジェネリックは、式ツリーのような比較的高度なものに限定されません。ネストされたジェネリックのより単純で具体的な例は次のとおりです。
Dictionary<string, List<int>>
string
s をキーに、List
sint
の を値として持つディクショナリ。