В C#, Как удалить свойство из ExpandoObject?

скажем, у меня есть этот объект:

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

Как бы я удалить foo.bang например?

Я не хочу просто установить значение свойства в null-для моих целей мне нужно удалить его вообще. Кроме того, я понимаю, что я мог бы создать совершенно новый ExpandoObject, рисуя пары kv с первого, но это было бы довольно неэффективно.

4 ответов


бросьте expando в IDictionary<string, object> и звонок Remove:

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

вы можете лечить ExpandoObject как IDictionary<string, object> вместо этого, а затем удалите его таким образом:

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

пример MSDN:

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

вы можете бросить его как IDictionary<string,object>, а затем используйте явное удалить метод.

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