リフレクションを通じて、 型の値のオブジェクトのプロパティを設定したいと思います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
?
ベストアンサー1
使用できます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);