Laden...

[erledigt] string --> Variablenzugriffe

Erstellt von Christi4n vor 15 Jahren Letzter Beitrag vor 15 Jahren 774 Views
C
Christi4n Themenstarter:in
79 Beiträge seit 2006
vor 15 Jahren
[erledigt] string --> Variablenzugriffe

Hallo,

Ich habe folgendes Problem und weiß leider nicht wirklich wie ich dies lösen kann:

Ich habe eine Klasse(zB Test.cs). In dieser sind zB. folgende Felder:*sonstiges *tmp *usw.

So, jetzt lese ich aus einem XML-File etwas aus. Ein XElement hat dabei 0-Alle Attribute welche auch in meiner Test-Klasse stehen.

Also "sonstiges","tmp", usw.

Ich möchte nun mittels einer for-schleife oder sonstwie alle Attribute des ausgewählten XElementes durchgehen und danach, für alle gefunden Attribute den Wert was dieses hat(Attribute.Value) der gleichnamigen Variable in Test.cs zuweisen.

Beispiel:
XElement hat nur Attribute "tmp" --> Test.tmp = attribute.Value

Hauptproblem: auf die Klasse und dem Feld zugreifen, da ich den Variablen-Namen ja als String bekomme.

Ich hoffe mein Problem halbwegs verständlich erklärt zu haben. Über Dictionary sollte es eigentlich funktionieren, jedoch muss ich dann erst wieder alles abschreiben usw, da wäre eine automatische Abarbeitung weitaus komfortabler.

G
497 Beiträge seit 2006
vor 15 Jahren

Stichwort Reflection, einfaches Beispiel. Du hast ein Objekt des Typs "myclass" und willst einen beliebigen Eigenschaftswert setzen:



private void setValue(myclass target, string propertyName, object value)
{
Type classType = typeof(myclass);
PropertyInfo pi = classType.GetProperty(propertyName);
if (pi != null)
{
pi.SetValue(target, value, null);
}
}


Du holst dir das PropertyInfo-Objekt - wenn es existiert, ansonsten ist das Feld NULL - und benutzt dessen setValue-Methode, um den Wert zu setzen. Darin nicht inbegriffen ist eine Fehlerbehandlung, wenn die Typkonvertierung fehlschlägt - was bei Typen, die nicht String sind, höchstwahrscheinlich der Fall sein wird. Du wirst von Hand die Umwandlung des Attributwerts in den Datentypen der jeweiligen Eigenschaft vornehmen müssen.

C
252 Beiträge seit 2007
vor 15 Jahren

Das ist mittels Reflection kein Problem.
Du gehst alle elemente im xml durch und holst dir das passende Property


System.Reflection.PropertyInfo property = obj.GetType().GetProperty(propertyName);
property.SetValue(obj, value, null);

edit: Tjo zu langsam

C
Christi4n Themenstarter:in
79 Beiträge seit 2006
vor 15 Jahren

Danke sehr, hat super geklappt