2013-01-23 11 views
19

Dire che ho questo oggetto:In C#, come rimuovere una proprietà da ExpandoObject?

dynamic foo = new ExpandoObject(); 
foo.bar = "fizz"; 
foo.bang = "buzz"; 

Come potrei rimuovere foo.bang per esempio?

Non voglio semplicemente impostare il valore della proprietà su null - per i miei scopi ho bisogno di rimuoverlo del tutto. Inoltre, mi rendo conto che potrei creare un ExpandoObject completamente nuovo disegnando coppie di kv dal primo, ma sarebbe piuttosto inefficiente.

risposta

28

Fusioni l'expando a IDictionary<string, object> e chiamare Remove:

var dict = (IDictionary<string, object>)foo; 
dict.Remove("bang"); 
21

Si può trattare la ExpandoObject come IDictionary<string, object> invece, e quindi rimuovere in questo modo:

IDictionary<string, object> map = foo; 
map.Remove("Jar"); 
+0

necessità di rimuovere il 'vaso' membro formare Foo Foo .. non è di per sé .., – Dhana

+1

@Dhana: Quindi cambiare 'foo' a' Jar' :) Ho aggiornato l'esempio, ma se capisci come funziona la risposta, non dovrebbe essere difficile risolverlo da solo ... –

+0

@Skeet: davvero bello .., grazie. – Dhana

7

si può lanciare come un IDictionary<string,object> e quindi utilizzare il metodo esplicito Remove.

IDictionary<string,object> temp = foo; 
temp.Remove("bang"); 
8

MSDN Esempio:

dynamic employee = new ExpandoObject(); 
employee.Name = "John Smith"; 
((IDictionary<String, Object>)employee).Remove("Name"); 
Problemi correlati