2009-06-18 3 views
1

Quelles sont les raisons possibles que Nullable < > types ne sont pas autorisés à passer en tant que paramètre TModel de System.Web.Mvc.ViewPage <TModel> générique? Cela pourrait être utile parfois.Nullable <> comme TModel pour ViewPage

Dans la source ASP.NET MVC défini ce TModel doit être une classe:

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

mais les types sont nullables types de valeur. Peut-être que la définition pourrait être moins restrictive ...

Répondre

3

Cela ne serait pas logique pour que cela fonctionne pour le moment, car ViewPage <T> vérifie toujours en interne que le modèle est une instance de T. Vous ne pourrez jamais passer null à cause de cette vérification.

En ce qui concerne les raisons pour lesquelles les types de structure n'étaient pas autorisés en premier lieu, il y avait une multitude de raisons. Parmi eux: (a) cela pourrait encourager les gens à utiliser des types de structures personnalisés pour un modèle, ce qui n'est presque jamais la bonne chose à faire; (b) vous ne pouvez pas passer un type de structure en tant que paramètre à Controller.UpdateModel(); (c) les modèles doivent avoir l'égalité de référence pour que les filtres puissent les inspecter et les modifier; (d) les types de structure intégrés comme int, etc., ne sont normalement pas utiles par eux-mêmes en tant qu'objet de modèle; et (e) les types de structure ne prennent pas en charge l'héritage, par ex. passer un modèle int dans un ViewPage <long> ferait exploser. Il s'avère que (c) ne pose probablement pas de problème car les types de structure doivent être immuables, mais les autres éléments nécessitent que les types de structures soient suffisamment pris en compte avant d'être pris en charge. Les conséquences de leur prise en charge sont beaucoup plus importantes que la simple suppression de la contrainte sur ViewPage <T>.

1

Une seule valeur n'est pas vraiment un "modèle" - vous pourriez simplement utiliser le dictionnaire et lancer?

Questions connexes