1

理解しようとしているTextBoxFor()ときに、MSDN でこの定義に出くわしました....

TextBoxFor<TModel, TProperty>(HtmlHelper<TModel>, Expression<Func<TModel, TProperty>>, IDictionary<String, Object>)

これは単なるジェネリック クラスですか、それとも他のクラスですか、それとも非 c# ですか?

(角括弧内の角括弧は私を投げています)

そして、それをどのように解釈しますか(C#などの初心者にとって問題がない限り、リンクは問題ありません)。

4

4 に答える 4

2

ネストされたジェネリック型です。

ExpressionタイプのFuncタイプTModel, TProperty

于 2013-08-05T15:13:17.793 に答える
1

入れ子になったジェネリック型パラメーターを持つクラス。

内側の部分:

Func<TModel, TProperty>

TModelジェネリック型を引数として取り、ジェネリック型の結果を返す関数を参照 (「記述」) するデリゲートTProperty

TProperty MyFunc(TModel model)

... への通常の引数の型に対応しますTextBoxFor():

model => model.Name

modelはタイプTModelmodel.Nameあり、タイプTPropertyです。

外側の部分:

Expression<T>

型のラムダ式 (デリゲート) を記述する式ツリーT。ジェネリック クラスを使用すると、コードを実行した結果ではなく、実行時にコード自体Expression<T>を (簡単に言えば) 調べることができます。つまり、このメソッドは、式をコンパイルして実行し、結果を取得するだけでなく、プロパティの実際の名前 (上記の例) を抽出することもできます。TextBoxFor()Name

単純に aFunc<>を引数として使用した場合、渡されたデリゲートを呼び出してその呼び出しの結果を取得することしかできず、この種の詳細を調べることはできません。

HTML ヘルパーの場合、式ツリーの使用は主にTextBox()、プロパティの名前を文字列として受け取るメソッドのタイプ セーフな代替手段です。

したがって、組み合わせて:

Expression<Func<TModel, TProperty>>

そのパラメータは、「ジェネリック型のパラメータを取り、ジェネリック型のプロパティを返すTextBoxFor()ラムダ式を記述する式ツリー」です。TModelTProperty

入れ子になったジェネリックは、式ツリーのような比較的高度なものに限定されません。ネストされたジェネリックのより単純で具体的な例は次のとおりです。

Dictionary<string, List<int>>

strings をキーに、Listsintの を値として持つディクショナリ。

于 2013-08-05T15:33:59.823 に答える