ExpandoObject
si riferisce al DLR ed è principalmente correlato per la riproduzione tra C# e un linguaggio dinamico (forse IronPython); tuttavia, più in generale questo tipo di oggetto property-bag può essere utile quando lo schema dei tipi è noto solo al runtime, magari in base ai dati del database/ai dati di configurazione. Forse un esempio di anti-pattern "piattaforma interna", ma è utile in scenari specifici per collegare le proprietà in fase di esecuzione. Naturalmente, per un utilizzo prettamente CLR (cioè senza i chiamanti DLR) si può fare questo molto più semplicemente con un indicizzatore e il dizionario:
obj["Name"] = "Fred";
string name = (string) obj["Name"];
Per scopi di associazione dati, anche con questo è possibile ottenere dati completi vincolanti utilizzando descrittori di proprietà personalizzati, tramite ICustomTypeDescriptor
o TypeDescriptionProvider
.
O per un semplice esempio: considerare DataTable
... questo è in parte che cosa si può fare qui (ancora una volta, in codice statico-digitato): (Esempio non testata)
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
DataRow row = table.Rows.Add("Fred");
fonte
2009-09-08 13:53:46
possibile duplicato di [ Quali sono i veri vantaggi di ExpandoObject?] (Http://stackoverflow.com/questions/1653046/what-are-the-true-benefits-of-expandoobject) – nawfal