Heim >Backend-Entwicklung >C++ >Wie legt man Eigenschaftswerte mithilfe von Reflection mit String-Eingaben fest?

Wie legt man Eigenschaftswerte mithilfe von Reflection mit String-Eingaben fest?

DDD
DDDOriginal
2025-01-20 10:27:10560Durchsuche

How to Set Property Values Using Reflection with String Inputs?

Verwenden Sie Reflektion, um String-Attributwerte festzulegen

Das Festlegen von Eigenschaftswerten mithilfe von Reflexions- und Zeichenfolgenwerten kann schwierig sein, da möglicherweise Typkonvertierungen erforderlich sind.

Angenommen, es gibt eine Schiffsklasse, die eine Eigenschaft namens Latitude vom Typ Double hat. Der folgende Code versucht, diese Eigenschaft auf den Zeichenfolgenwert „5,5“ festzulegen:

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

Dieser Code löst jedoch eine ArgumentException aus, da der Zeichenfolgenwert nicht direkt in den Double-Typ konvertiert werden kann.

Um dieses Problem zu lösen, können Sie Convert.ChangeType() für die Typkonvertierung verwenden. Mit dieser Funktion können Sie Werte basierend auf Laufzeitinformationen des Zieltyps konvertieren. Der folgende Code demonstriert diesen Ansatz:

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

Durch die Verwendung von Convert.ChangeType() wird der Zeichenfolgenwert erfolgreich in den Double-Typ konvertiert und der Latitude-Eigenschaft zugewiesen. Beachten Sie, dass Sie möglicherweise Ausnahmen behandeln oder eine Sonderfalllogik implementieren müssen, wenn bestimmte Konvertierungstypen nicht unterstützt werden.

Das obige ist der detaillierte Inhalt vonWie legt man Eigenschaftswerte mithilfe von Reflection mit String-Eingaben fest?. 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