質問
DynamicObjectタイプを理解しようとしています。このMSDNの記事は、DynamicObjectを作成および使用する方法として非常に見事で明確であることがわかりました。
http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx
この記事には、DynamicObjectから継承する単純な動的ディクショナリクラスが含まれています。
次に、動的に作成されたDynamicObjectプロパティを反復したいと思います。
dynamic d = new DynamicDictionary();
d.Name = "Myname";
d.Number = 1080;
foreach (var prop in d.GetType().GetProperties())
{
Console.Write prop.Key;
Console.Write prop.Value;
}
明らかにそれは機能しません。 DynamicObjectから継承するあらゆる種類の既存のオブジェクトにこれを使用する方法を実際に学ぼうとしているため、DynamicDictionaryクラスを変更せずにこれを行う方法を学びたいと思います。
反射は必要ですか?私は何かが足りないに違いありません...
解決
dynamicDictionary.getDynamicMemberNames()メソッドを試しましたか? - http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.getdynamicmembernames.aspx
他のヒント
私はあなたがに興味を持っていると信じています ExpandoObject
クラス。 DynamicObject
クラスは、すべてのロジックを提供することを意図した基盤にすぎません。明示的に実装します IDictionary<string, object>
インターフェイスを使用して、ITプロパティにアクセスしたり、新しいプロパティを追加したりできます。
// declare the ExpandoObject
dynamic expObj = new ExpandoObject();
expObj.Name = "MyName";
expObj.Number = 1000;
// print the dynamically added properties
foreach (KeyValuePair<string, object> kvp in expObj) // enumerating over it exposes the Properties and Values as a KeyValuePair
Console.WriteLine("{0} = {1}", kvp.Key, kvp.Value);
// cast to an IDictionary<string, object>
IDictionary<string, object> expDict = expObj;
// add a new property via the dictionary reference
expDict["Foo"] = "Bar";
// verify it's been added on the original dynamic reference
Console.WriteLine(expObj.Foo);
私はあなたが実装していることに気づいたばかりでした DynamicDictionary
あなたの質問をクラスと誤解しました。ごめん。
動的参照で使用する場合、公開されたメンバーのみにアクセスできます。からのみです Count
公開されています(他のもの以外に DynamicObject
メンバー)、内側の辞書にアクセスしてそれらの値を簡単に取得するためにリフレクションを使用する必要があります(それ以上の変更を行うつもりはない場合)。