You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中直接设置属性正常,反射设置为何抛出类型转换异常?

问题原因解析

直接赋值parentOfProperty.TargetProp = 5.0;能正常运行,核心原因是TargetPropType类型定义了从double到自身的隐式转换运算符。C#编译器在编译这段代码时,会自动识别这个隐式转换规则,自动生成把5.0转换成TargetPropType实例的代码,再完成赋值——这是编译器提供的语法糖,帮你省略了显式转换的步骤。

而反射调用PropertyInfo.SetValue或SetMethod.Invoke时,属于纯运行时操作,不会触发编译器的隐式转换逻辑。反射机制要求传入的参数类型必须与属性的实际类型(TargetPropType)严格匹配,你直接传入double类型的值,自然会抛出类型不匹配的ArgumentException。

解决方法

在反射赋值前,手动将double值转换为TargetPropType实例,再传入反射方法:

// 利用隐式转换手动转换
var targetValue = (TargetPropType)5.0;
// 或者调用对应构造函数(如果TargetPropType支持)
// var targetValue = new TargetPropType(5.0);

propertyInfo.SetValue(parentOfProperty, targetValue);

内容的提问来源于stack exchange,提问作者user2653422

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:19:55