Loop DynamicObject -Eigenschaften
-
25-10-2019 - |
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 ...
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).