使用反射设置字符串类型属性值
使用反射设置字符串类型属性值时,如果目标属性预期的是其他类型,则可能会导致 ArgumentException 异常。
解决方案:使用 Convert.ChangeType() 进行动态类型转换
为了解决这个问题,可以使用 Convert.ChangeType() 方法。此方法利用运行时信息来转换数据类型。但是,需要注意的是,并非所有转换都是可行的。
代码示例:
考虑以下代码片段:
<code class="language-csharp">Ship ship = new Ship(); string value = "5.5"; PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude"); propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);</code>
propertyInfo = ship.GetType().GetProperty("Latitude")
获取 "Latitude" 属性信息。Convert.ChangeType(value, propertyInfo.PropertyType)
将字符串 "5.5" 转换为双精度浮点数,这与属性类型匹配。propertyInfo.SetValue(ship, ..., null)
将属性设置为转换后的值。注意: 此解决方案假设没有异常处理或针对使用 Convert.ChangeType() 无法直接转换的类型的特殊情况逻辑。
以上是如何在 C# 中使用反射安全地设置字符串属性值?的详细内容。更多信息请关注PHP中文网其他相关文章!