Pregunta

¿Cuáles son las posibles razones por las que Nullable < > los tipos no se pueden pasar como parámetro TModel de System.Web.Mvc.ViewPage < TModel > ¿genérico? Esto podría ser útil a veces.

En la fuente ASP.NET MVC se definió qué TModel debería ser una clase:

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

pero los tipos anulables son tipos de valor. Tal vez la definición podría ser menos restrictiva ...

¿Fue útil?

Solución

No tendría sentido que esto funcione en este momento, ya que ViewPage < T > internamente siempre verifica que el modelo es una instancia de T. Nunca podría pasar nulo debido a esta verificación.

En cuanto a por qué los tipos de estructura no estaban permitidos en primer lugar, había una multitud de razones. Entre ellos: (a) podría alentar a las personas a usar tipos de estructura personalizados para un modelo, que casi nunca es lo correcto; (b) no puede pasar un tipo de estructura como parámetro a Controller.UpdateModel (); (c) los modelos deben tener igualdad de referencia para que los filtros puedan inspeccionarlos y modificarlos; (d) los tipos de estructura incorporados como int, etc., normalmente no son útiles por sí mismos como su objeto modelo; y (e) los tipos de estructura no admiten herencia, p. ej. pasar un modelo int a ViewPage < long > explotaría.

Resulta que (c) probablemente no sea un problema porque los tipos de estructura deberían ser inmutables, pero los otros elementos requieren que los tipos de estructura tengan un amplio pensamiento y decisión de diseño antes de admitirlos. Las consecuencias de admitir esto son mucho mayores que simplemente eliminar la restricción en ViewPage < T > ;.

Otros consejos

Un valor único no es realmente un " modelo " - ¿Podrías usar el diccionario y emitir?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top