1

System.Web.Mvc.ViewPage <TModel>ジェネリックのTModelパラメーターとしてNullable<>型を渡すことが許可されていない理由として考えられるものは何ですか?これは時々便利かもしれません。

ASP.NET MVCソースでは、どのTModelをクラスにするかを定義しました。

public class ViewPage<TModel> : ViewPage where TModel : class

ただし、Null許容型は値型です。たぶん、定義はそれほど制限的ではないかもしれません...

4

2 に答える 2

3

ViewPage<T> はモデルが T のインスタンスであることを常に内部的に検証するため、現時点ではこれが機能しても意味がありません。このチェックのために null を渡すことはできません。

そもそも構造型が許可されなかった理由については、さまざまな理由がありました。(a) 人々がモデルにカスタム構造型を使用することを奨励する可能性がありますが、これは正しいことではありません。(b) Controller.UpdateModel() のパラメーターとして構造体型を渡すことはできません。(c) フィルターがモデルを検査および変更できるように、モデルには参照の等価性が必要です。(d) int などの組み込み構造型は、通常、モデル オブジェクトとして単独では役に立ちません。(e) 構造体型は継承をサポートしていません。たとえば、int モデルを ViewPage<long> に渡すと失敗します。

構造型は不変であるべきなので (c) はおそらく問題ではないことがわかりますが、他の項目では、構造型をサポートする前に十分な検討と設計上の決定を行う必要があります。これらをサポートすることの結果は、ViewPage<T> の制約を単に削除するよりもはるかに大きくなります。

于 2009-06-18T16:44:26.947 に答える
1

単一の値は実際には「モデル」ではありません。辞書を使用してキャストするだけで済みますか?

于 2009-06-18T11:55:22.253 に答える