È 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?