Dynamisch einen Wert von einem dynamischen Objekt abrufen

8

Ja, der Titel klingt etwas verwirrend, also erkläre ich, was ich meine: Angenommen, Sie haben ein dynamisches C # 4.0-Objekt und den Namen einer Eigenschaft. Wie würden Sie diese Eigenschaft vom dynamischen Objekt abrufen?

Mit anderen Worten, wie würden Sie Folgendes umsetzen:

%Vor%

Eine andere Möglichkeit ist, ein dynamisches Objekt als IDictionary zu behandeln.

Beachten Sie, dass Reflektion hier wahrscheinlich keine Option ist, da das dynamische Objekt eine benutzerdefinierte Implementierung sein kann, die nicht reflektionsbasiert ist (z. B. durch Erweitern von DynamicObject und Ausführen einer eigenen Sache).

    
David Ebbo 18.12.2009, 07:07
quelle

2 Antworten

13

Sie müssten eine Aufruf-Site erstellen, einen Ordner erstellen usw.

Der einfachste Weg, um zu sehen, was passiert, ist dies zu kompilieren:

%Vor%

Dekompiliere es dann mit Reflector und ermittle, was es macht. Es wird ziemlich kompliziert sein, wohlgemerkt - und Sie müssen es von einer einzelnen, statischen, zwischengespeicherten Aufrufseite zu einer neuen bei jedem Aufruf ändern.

Hier ist ein Beispiel, das funktioniert ... aber ob es vollständig korrekt ist oder nicht, ist eine andere Sache :) (Ich habe genau das gemacht, was ich oben vorgeschlagen habe.)

%Vor%     
Jon Skeet 18.12.2009, 07:11
quelle
3

Das Open-Source-Framework ImpromptuInterface (verfügbar in nuget) erledigt dies und macht die zusätzliche Arbeit, die damit verbunden ist, weil das Zwischenspeichern der Aufruf-Site für die Leistung wichtig ist.

Siehe InvokeGet

%Vor%     
jbtule 14.03.2011 05:44
quelle

Tags und Links