2013-01-23 57 views
19

说我有这个对象:在C#中,我如何从ExpandoObject中删除属性?

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

我怎么会删除foo.bang例如?

我不想简单地将属性的值设置为空 - 为了我的目的,我需要将它完全删除。另外,我意识到我可以通过从第一个绘制kv对创建一个全新的ExpandoObject,但这样做效率很低。

回答

28

施放的expando到IDictionary<string, object>并调用Remove

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

可以治疗ExpandoObject作为IDictionary<string, object>代替,然后将其删除这种方式:

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

需要删除的成员 '罐子' 形成富..不是foo它的自我.., – Dhana

+1

@Dhana:所以改变'Foo'到'Jar' :)我已经更新了这个例子,但是如果你明白答案的工作方式,它不应该很难自己解决它... –

+0

@Skeet:非常好..谢谢。 – Dhana

7

你可以将它转换为IDictionary<string,object>,然后使用明确的Remove方法。

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

MSDN例子:

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