Im cercando di utilizzare DynamicObject in C#, e avevo bisogno di una serie di dinamica:Matrice di dinamica | ExpandoObject | con una sintassi di inizializzazione compressa
var d = new dynamic[];
che funziona bene.
MODIFICA: vedere ExpandoObject di seguito.
Ma mi piace anche riempire tale array con alcuni dati con questo compressa inizializzare nuova sintassi:
var d = new dynamic[] {
new {
Name = "Some",
Number = 1010
},
new {
Name = "Other",
Number = 2010
}
}
Ma in questo caso tutti gli oggetti ottiene il tipo "oggetto" non dinamica e un ciclo tra gli elementi mi darà un'eccezione:
foreach (dynamic item in d)
{
@item.Name
@item.Number
}
Errore: 'oggetto' non contiene una definizione per 'Nome'. Immagino di aver appena inizializzato gli elementi dell'array nel modo sbagliato. Come aggiungere oggetti dinamici invece?
EDIT: Nuovo contenuto:
mi rendo conto "dinamica" non ha la capacità di aggiungere in modo dinamico proprietà.
È meglio utilizzare ExpandoObject che espone tutti gli elementi in un dizionario interno come proprietà. Ma purtroppo ExpandoObject non sembra sostenere questa bella compressa creare la sintassi, e il compilatore si lamenta:
var d = new ExpandoObject[]{
new ExpandoObject(){
Name="Nnn",
Number=1080
}
}
Quindi la risposta potrebbe essere solo: non è possibile.
Sei sicuro non vuoi solo un array di tipo anonimo? – Ani
Si tratta di ASP.NET MVC3? –
Ricorda che un 'dynamic' _is_ un' oggetto', solo che il compilatore C# lo tratta in modo diverso e gestisce tutti gli accessi su 'dynamic' off al DLR – thecoop