質問

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 メンバー)、内側の辞書にアクセスしてそれらの値を簡単に取得するためにリフレクションを使用する必要があります(それ以上の変更を行うつもりはない場合)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top