通过反射使用字符串值设置属性
我想通过反射设置对象的属性,其值为type
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
类型的运行时信息来更改表示格式。但是,并非所有转换都是可能的,并且如果您要支持来自not类型的转换,则可能需要编写特殊情况的逻辑IConvertible
。
相应的代码(无异常处理或特殊情况逻辑)为:
Ship ship = new Ship();string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude");
propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);
以上是 通过反射使用字符串值设置属性 的全部内容, 来源链接: utcz.com/qa/406549.html