David Hodgson David Hodgson - 2 months ago 10
C# Question

Setting a property by reflection with a string value

I'd like to set a property of an object through Reflection, with a value of type

string
.
So, for instance, suppose I have a
Ship
class, with a property of
Latitude
, which is a
double
.

Here's what I'd like to do:

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


As is, this throws an
ArgumentException
:


Object of type 'System.String' cannot be converted to type 'System.Double'.


How can I convert value to the proper type, based on
propertyInfo
?

Answer

You can use Convert.ChangeType() - It allows you to use runtime information on any IConvertible type to change representation formats. Not all conversions are possible, though, and you may need to write special case logic if you want to support conversions from types that are not IConvertible.

The corresponding code (without exception handling or special case logic) would be:

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