Gibt es in C # eine Möglichkeit, mithilfe von Reflektion eine Objekteigenschaft festzulegen?
Ex:
MyObject obj = new MyObject();
obj.Name = "Value";
Ich möchte obj.Name
mit Reflexion setzen. Etwas wie:
Reflection.SetProperty(obj, "Name") = "Value";
Gibt es eine Möglichkeit, dies zu tun?
c#
.net
reflection
properties
Melursus
quelle
quelle
var val = Convert.ChangeType(propValue, propInfo.PropertyType);
source: devx.com/vb2themax/Tip/19599obj.GetType().GetProperty("Name")?.GetSetMethod()?.Invoke(...)
CanWrite=False
Typen festzulegen, oder?Sie können auch:
Dabei ist Ziel das Objekt, dessen Eigenschaft festgelegt wird.
quelle
Reflexion im Grunde, dh
oder es gibt Bibliotheken, die sowohl hinsichtlich der Benutzerfreundlichkeit als auch der Leistung helfen. Zum Beispiel mit FastMember :
(was auch den Vorteil hat, dass man nicht im Voraus wissen muss, ob es sich um ein Feld gegen eine Eigenschaft handelt)
quelle
Oder Sie können Marc's einen Liner in Ihre eigene Erweiterungsklasse einwickeln:
und nenne es so:
Fügen Sie für eine gute Maßnahme eine Methode hinzu, um einen Eigenschaftswert zu erhalten:
quelle
Ja, mit
System.Reflection
:quelle
Verwenden Sie Folgendes:
oder
quelle
Sie können auch auf ähnliche Weise auf Felder zugreifen:
Mit Reflexion kann alles ein offenes Buch sein :) In meinem Beispiel binden wir an ein Feld auf privater Instanzebene.
quelle
Sie können dies ausprobieren, wenn Sie Eigenschaften eines Objekts von einem anderen Objekt mithilfe von Eigenschaftsnamen massenweise zuweisen möchten:
quelle
Ich habe gerade ein Nuget-Paket veröffentlicht, mit dem nicht nur die Eigenschaften der ersten Ebene, sondern auch verschachtelte Eigenschaften im angegebenen Objekt in beliebiger Tiefe eingerichtet werden können.
Hier ist das Paket
Legt den Wert einer Eigenschaft eines Objekts anhand seines Pfads vom Stamm fest.
Das Objekt kann ein komplexes Objekt sein und die Eigenschaft kann eine tief verschachtelte Eigenschaft mit mehreren Ebenen sein oder es kann eine Eigenschaft direkt unter dem Stamm sein.
ObjectWriter
findet die Eigenschaft mithilfe des Eigenschaftspfadparameters und aktualisiert ihren Wert. Der Eigenschaftspfad sind die angehängten Namen der Eigenschaften, die vom Stamm bis zur Endknoteneigenschaft besucht werden, die wir festlegen möchten, getrennt durch den Trennzeichenfolgenparameter.Verwendungszweck:
So richten Sie die Eigenschaften direkt unter dem Objektstamm ein:
Dh.
LineItem
Klasse hat eine int-Eigenschaft namensItemId
Zum Einrichten verschachtelter Eigenschaften auf mehreren Ebenen unterhalb des Objektstamms:
Dh.
Invite
Klasse hat eine Eigenschaft namensState
, die eine Eigenschaft namens hatInvite
(vom Typ Invite) hat, die eine Eigenschaft namens hatRecipient
, die eine Eigenschaft namens hatId
.Um die Dinge noch komplexer zu machen, ist die
State
Eigenschaft kein Referenztyp, sondern einstruct
.So können Sie die Id-Eigenschaft (auf den Zeichenfolgenwert von "Outlook") am unteren Rand des Objektbaums in einer einzelnen Zeile festlegen.
quelle
Basierend auf MarcGravells Vorschlag habe ich die folgende statische Methode erstellt. Die Methode weist mithilfe von FastMember generell alle übereinstimmenden Eigenschaften vom Quellobjekt zum Ziel zu
quelle