Ich bin auf der Suche nach einer Möglichkeit, Mitglieder dynamisch zu einem dynamischen Objekt hinzuzufügen. OK, ich denke, ein wenig Klärung benötigt ...Mitglieder dynamisch zu einem dynamischen Objekt hinzufügen
Wenn Sie das tun:
dynamic foo = new ExpandoObject();
foo.Bar = 42;
Die Bar
Eigenschaft wird zur Laufzeit dynamisch hinzugefügt werden. Aber der Code bezieht sich immer noch "statisch" auf Bar (der Name "Bar" ist fest codiert) ... Was, wenn ich eine Eigenschaft zur Laufzeit hinzufügen möchte, ohne ihren Namen zur Kompilierzeit zu kennen?
Ich weiß, wie dies zu tun mit einem benutzerdefinierten dynamischen Objekt (I blogged about it tatsächlich vor ein paar Monaten), die Methoden der DynamicObject
-Klasse, aber wie kann ich es mit jedes dynamischen Objekt?
Ich könnte wahrscheinlich die IDynamicMetaObjectProvider
Schnittstelle verwenden, aber ich verstehe nicht, wie man es benutzt. Zum Beispiel, welches Argument sollte ich an die GetMetaObject
Methode weitergeben? (es erwartet ein Expression
)
Und übrigens, wie führen Sie Reflexion über dynamische Objekte? "Regular" Reflexion und TypeDescriptor
zeigen nicht die dynamischen Mitglieder ...
Jeder Einblick würde uns freuen!
In C# 6.0, * kann sein * Sie können es wie 'foo schreiben. $ Bar = 42;' :) Nicht sicher, ob es für dynamische erlaubt ist ... – nawfal
@Nawfal, eigentlich, diese Funktion wurde gelöscht .. Aber egal, 'foo. $ Bar' ist nur eine Abkürzung für' foo ["Bar"] ' –
Thomas, wusste nicht, dass die Funktion gelöscht wurde (ich bin froh darüber), aber oh ja, für einen Moment Ich habe die wirkliche Anforderung deines q übersehen. – nawfal