在C#中,如何从ExpandoObject中删除属性?

Mat*_*att 22 c# expandoobject

说我有这个对象:

dynamic foo = new ExpandoObject();
foo.bar = "fizz";
foo.bang = "buzz";
Run Code Online (Sandbox Code Playgroud)

我该如何删除foo.bang

我不想简单地将属性的值设置为null - 为了我的目的,我需要完全删除它.此外,我意识到我可以通过从第一个绘制kv对来创建一个全新的ExpandoObject,但这将是非常低效的.

Jon*_*Jon 42

将expando转换为IDictionary<string, object>并调用Remove:

var dict = (IDictionary<string, object>)foo;
dict.Remove("bang");
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 27

您可以将其ExpandoObject视为IDictionary<string, object>替代,然后以这种方式删除它:

IDictionary<string, object> map = foo;
map.Remove("Jar");
Run Code Online (Sandbox Code Playgroud)


Sim*_*ead 12

MSDN示例:

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


Ree*_*sey 8

您可以将其强制转换为IDictionary<string,object>,然后使用显式的Remove方法.

IDictionary<string,object> temp = foo;
temp.Remove("bang");
Run Code Online (Sandbox Code Playgroud)