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!