Maison >développement back-end >C++ >Comment puis-je définir la valeur d'une propriété à l'aide de la réflexion lorsque la valeur est une chaîne ?

Comment puis-je définir la valeur d'une propriété à l'aide de la réflexion lorsque la valeur est une chaîne ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-20 10:37:09727parcourir

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

Utilisez la réflexion pour définir les valeurs des attributs de chaîne

Introduction : La manipulation d'objets par programmation via la réflexion nécessite souvent de définir des propriétés à l'aide d'affectations de différents types de données. Cette question explore une situation courante : définir une propriété avec une valeur de chaîne.

Question : Considérons une classe Ship qui possède une propriété Latitude de type double. Essayez de définir cette propriété en utilisant la réflexion, le code est le suivant :

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

Cependant, ce code échoue avec une ArgumentException car la valeur de la chaîne ne peut pas être convertie directement en double.

Solution : Pour résoudre ce problème, la valeur de chaîne doit être explicitement convertie en type correct en fonction de PropertyInfo. Un outil courant à cet effet est Convert.ChangeType(). Il utilise les informations d'exécution pour convertir entre les types IConvertible.

Le code modifié à l'aide de Convert.ChangeType() est :

<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>

Ce code définit avec succès la propriété Latitude sur une valeur double convertie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn