Domanda

Quali sono le possibili ragioni per cui Nullable < > i tipi non possono essere passati come parametro TModel di System.Web.Mvc.ViewPage < TModel > generico? Questo potrebbe essere utile a volte.

In ASP.NET il sorgente MVC ha definito quale TModel dovrebbe essere una classe:

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

ma i tipi nullable sono tipi di valore. Forse la definizione potrebbe essere meno restrittiva ...

È stato utile?

Soluzione

Non avrebbe senso che funzioni al momento, poiché ViewPage < T > internamente verifica sempre che il modello sia un'istanza di T. Non saresti mai in grado di passare null a causa di questo controllo.

Per quanto riguarda il motivo per cui i tipi di struttura non erano consentiti in primo luogo, c'erano una moltitudine di ragioni. Tra questi: (a) potrebbe incoraggiare le persone a usare tipi di struttura personalizzati per un modello, che non è quasi mai la cosa giusta da fare; (b) non è possibile passare un tipo di struttura come parametro a Controller.UpdateModel (); (c) i modelli dovrebbero avere uguaglianza di riferimento affinché i filtri possano ispezionarli e modificarli; (d) i tipi di struttura incorporati come int, ecc., normalmente non sono utili da soli come oggetto modello; e (e) i tipi di struttura non supportano l'ereditarietà, ad es. passare un modello int in una ViewPage < long > esploderebbe.

Si scopre che (c) probabilmente non è un problema perché i tipi di struttura dovrebbero essere immutabili, ma gli altri elementi richiedono che si consenta di prendere in considerazione i tipi di struttura e di prendere una decisione ampia prima di supportarli. Le conseguenze del loro supporto sono molto maggiori della semplice rimozione del vincolo su ViewPage < T > ;.

Altri suggerimenti

Un singolo valore non è in realtà un " modello " - potresti semplicemente usare il dizionario e il cast?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top