1. ホーム
  2. c#

[解決済み] 文字列値によるリフレクションでプロパティを設定する

2022-03-17 04:20:35

質問

Reflection を通してオブジェクトのプロパティを設定したいのですが、型が string . では、例えば、私が Ship クラスで、プロパティが Latitude であり、これは double .

こんな感じです。

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

このままでは ArgumentException :

System.String 型のオブジェクトは 'System.Double' 型に変換できません。

を元に、値を適切な型に変換するにはどうすればよいですか? propertyInfo ?

解決方法は?

を使用することができます。 Convert.ChangeType() - これによって、実行時情報を任意の IConvertible 型を使用して表現形式を変更することができます。しかし、すべての変換が可能なわけではありません。 IConvertible .

対応するコード(例外処理や特殊なケースのロジックを含まない)は、次のようになります。

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