Frage

Ich versuche den DynamicObject -Typ zu verstehen. Fanden, dass dieser MSDN -Artikel sehr konsistent und klar ist, wie DynamicObject erstellt und verwendet wird:

http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx

Der Artikel enthält eine einfache DynamicDictionary -Klasse, die von DynamicObject erbt.

Jetzt möchte ich über meine dynamisch erstellten DynamicObject -Eigenschaften iterieren:

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;
}

Offensichtlich funktioniert das nicht. Ich möchte lernen, wie man dies ohne eine Änderung in meiner Dynamikdictionary -Klasse macht, da ich wirklich versuche zu lernen, wie ich dies für alle Arten von vorhandenen Objekten verwenden kann, die von DynamicObject erbt.

Ist Reflexion benötigt? Mir muss etwas fehlen ...

War es hilfreich?

Lösung

Haben Sie dynamicDictionary.getDynamicMemberNames () -Methode ausprobiert? - - http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.getdynamicmemberNames.aspx

Andere Tipps

Ich glaube, Sie würden sich für die interessieren ExpandoObject Klasse. Das DynamicObject Die Klasse ist nur eine Basis, in der Sie die gesamte Logik bereitstellen sollen. Es implementiert explizit die IDictionary<string, object> Schnittstelle, damit Sie auf die Eigenschaften zugreifen oder neue auf diese Weise hinzufügen können.

// 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);

Ich hatte gerade erkannt, dass Sie die implementieren DynamicDictionary Klasse und missverstanden Ihre Frage. Es tut uns leid.

Wenn Sie mit einer dynamischen Referenz verwendet werden, haben Sie nur Zugriff auf öffentlich exponierte Mitglieder. Seit Nur Count wird öffentlich erklärt (außer den anderen DynamicObject Mitglieder) müssten Sie Reflexion verwenden, um auf das innere Wörterbuch zuzugreifen, um diese Werte einfach zu erhalten (wenn Sie keine weiteren Änderungen vornehmen möchten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top