我想通过反射设置一个对象的属性,值类型为字符串。
例如,假设我有一个Ship类,它的纬度属性是double。
这是我想做的:
Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude");
propertyInfo.SetValue(ship, value, null);
这将抛出一个ArgumentException:
类型为System的对象。字符串'不能转换为'System.Double'类型。
如何将值转换为适当的类型,基于propertyInfo?
如果你正在编写Metro应用程序,你应该使用其他代码:
Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetTypeInfo().GetDeclaredProperty("Latitude");
propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType));
注意:
ship.GetType().GetTypeInfo().GetDeclaredProperty("Latitude");
而不是
ship.GetType().GetProperty("Latitude");
正如其他几个人所说,您希望使用Convert。ChangeType:
propertyInfo.SetValue(ship,
Convert.ChangeType(value, propertyInfo.PropertyType),
null);
事实上,我建议您查看整个Convert Class。
这个类和许多其他有用的类都是系统名称空间的一部分。我发现,大约每隔一年扫描一下这个名称空间,看看我遗漏了哪些特性,这很有用。试试吧!
如果你正在编写Metro应用程序,你应该使用其他代码:
Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetTypeInfo().GetDeclaredProperty("Latitude");
propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType));
注意:
ship.GetType().GetTypeInfo().GetDeclaredProperty("Latitude");
而不是
ship.GetType().GetProperty("Latitude");