引言: 通过反射以编程方式操作对象通常需要使用各种数据类型的赋值来设置属性。此问题探讨了一种常见情况:使用字符串值设置属性。
问题: 考虑一个具有双精度类型 Latitude 属性的 Ship 类。尝试使用反射设置此属性,代码如下:
<code>Ship ship = new Ship(); string value = "5.5"; PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude"); propertyInfo.SetValue(ship, value, null);</code>
但是,这段代码会因 ArgumentException 而失败,因为字符串值无法直接转换为双精度型。
解决方案: 为了解决这个问题,必须根据 PropertyInfo 显式地将字符串值转换为正确的类型。为此目的,一个通用的工具是 Convert.ChangeType()。它利用运行时信息在 IConvertible 类型之间进行转换。
使用 Convert.ChangeType() 的修改后的代码是:
<code>Ship ship = new Ship(); string value = "5.5"; PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude"); propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);</code>
此代码成功地将 Latitude 属性设置为转换后的双精度值。
以上是当值为字符串时,如何使用反射设置属性的值?的详细内容。更多信息请关注PHP中文网其他相关文章!