È lo zucchero sintattico, in pratica. Non penso che sia inteso per essere funzionalmente "migliore" del vecchio dizionario ViewData
, solo molto meno verboso con cui lavorare. Invece di estrarre le cose dal dizionario e lanciarle manualmente (e bloccarsi se sono sbagliate), puoi semplicemente usarle senza alcuna verbosità extra (e bloccarti se sono sbagliate).
Qui è un post del blog che contiene alcuni esempi di codice "prima e dopo" che utilizzano il vecchio dizionario ViewData
e il nuovo ViewBag
dinamico. In particolare, guarda foreach
iterando attraverso l'elenco di stringhe.
foreach (var color in ViewData["listColors"] as List<string>)
.. diventa ..
foreach (var color in ViewBag.ListColors)
Modifica: Martinho è un punto eccellente! La nuova versione dovrebbe probabilmente dichiarare esplicitamente un string
piuttosto che un var
, in questo modo:
foreach (string color in ViewBag.ListColors)
Due motivi:
- Se hai sbagliato, ad es.
ViewBag.ListColors
è un List
di System.Drawing.Color
oggetti, riceverai un errore immediato e chiaro, Cannot convert type 'System.Drawing.Color' to 'string'
, piuttosto che un output strano e indesiderato.
- Se dichiari
color
come var
, l'inferenza di tipo lo dedurrà come dynamic
, quindi tutto il suo utilizzo nel ciclo passerà attraverso l'associazione tardiva del Dynamic Language Runtime, giusto? Sicuramente questo è un colpo di performance non necessario?