web-dev-qa-db-ja.com

C#では、ExpandoObjectからプロパティを削除するにはどうすればよいですか?

このオブジェクトがあるとしましょう:

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

どうすれば削除できますかfoo.bang 例えば?

プロパティの値を単にnullに設定したくありません-私の目的のために、完全に削除する必要があります。また、最初からkvペアを描画することでまったく新しいExpandoObjectを作成できることも理解していますが、それはかなり非効率的です。

23
Matt Cashatt

ExpandoをIDictionary<string, object>にキャストし、 Remove を呼び出します。

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

代わりに ExpandoObjectIDictionary<string, object> として扱い、その方法で削除することができます。

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

MSDNの例:

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

これをIDictionary<string,object>としてキャストし、明示的な Remove メソッドを使用できます。

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