Heim >Backend-Entwicklung >C++ >Wie kann man String-Eigenschaftswerte mithilfe von Reflection in C# sicher festlegen?

Wie kann man String-Eigenschaftswerte mithilfe von Reflection in C# sicher festlegen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-20 10:38:09792Durchsuche

How to Safely Set String Property Values Using Reflection in C#?

Verwenden Sie Reflektion, um den Attributwert des Zeichenfolgentyps festzulegen

Wenn Sie Reflektion zum Festlegen eines Attributwerts vom Typ „String“ verwenden und das Zielattribut andere Typen erwartet, kann dies zu einer ArgumentException-Ausnahme führen.

Lösung: Verwenden Sie Convert.ChangeType() für die dynamische Typkonvertierung

Um dieses Problem zu lösen, können Sie die Methode Convert.ChangeType() verwenden. Diese Methode verwendet Laufzeitinformationen zum Konvertieren von Datentypen. Es ist jedoch wichtig zu beachten, dass nicht alle Konvertierungen möglich sind.

Codebeispiel:

Bedenken Sie den folgenden Codeausschnitt:

<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>
  1. Attribute abrufen: propertyInfo = ship.GetType().GetProperty("Latitude")Informationen zum Attribut „Breitengrad“ abrufen.
  2. Stringwert konvertieren: Convert.ChangeType(value, propertyInfo.PropertyType) Konvertiert die Zeichenfolge „5.5“ in eine Gleitkommazahl mit doppelter Genauigkeit, die dem Attributtyp entspricht.
  3. Attributwert festlegen: propertyInfo.SetValue(ship, ..., null) Das Attribut auf den konvertierten Wert setzen.

Hinweis: Diese Lösung setzt keine Ausnahmebehandlung oder Sonderfalllogik für Typen voraus, die nicht direkt mit Convert.ChangeType() konvertiert werden können.

Das obige ist der detaillierte Inhalt vonWie kann man String-Eigenschaftswerte mithilfe von Reflection in C# sicher festlegen?. 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