Heim >Backend-Entwicklung >C++ >Wie kann ich den Wert einer Eigenschaft mithilfe von Reflection festlegen, wenn der Wert eine Zeichenfolge ist?

Wie kann ich den Wert einer Eigenschaft mithilfe von Reflection festlegen, wenn der Wert eine Zeichenfolge ist?

Susan Sarandon
Susan SarandonOriginal
2025-01-20 10:37:09727Durchsuche

How Can I Set a Property's Value Using Reflection When the Value is a String?

Verwenden Sie Reflektion, um String-Attributwerte festzulegen

Einleitung: Die programmgesteuerte Bearbeitung von Objekten durch Reflektion erfordert häufig das Festlegen von Eigenschaften mithilfe von Zuweisungen verschiedener Datentypen. Diese Frage untersucht eine häufige Situation: das Festlegen einer Eigenschaft mit einem Zeichenfolgenwert.

Frage: Stellen Sie sich eine Schiffsklasse vor, die über eine Latitude-Eigenschaft vom Typ Double verfügt. Versuchen Sie, diese Eigenschaft mithilfe von Reflektion festzulegen. Der Code lautet wie folgt:

<code>Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude");
propertyInfo.SetValue(ship, value, null);</code>

Dieser Code schlägt jedoch mit einer ArgumentException fehl, da der Zeichenfolgenwert nicht direkt in einen Double-Wert konvertiert werden kann.

Lösung: Um dieses Problem zu beheben, muss der Zeichenfolgewert basierend auf PropertyInfo explizit in den richtigen Typ konvertiert werden. Ein gängiges Tool für diesen Zweck ist Convert.ChangeType(). Es verwendet Laufzeitinformationen zum Konvertieren zwischen IConvertible-Typen.

Der mit Convert.ChangeType() geänderte Code lautet:

<code>Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude");
propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);</code>

Dieser Code setzt die Latitude-Eigenschaft erfolgreich auf einen konvertierten Double-Wert.

Das obige ist der detaillierte Inhalt vonWie kann ich den Wert einer Eigenschaft mithilfe von Reflection festlegen, wenn der Wert eine Zeichenfolge ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn