[英]Cast a value and set a property using reflection
我正在尝试动态设置对象的属性。 该方法采用类型为object
的参数,并使用PropertyInfo.SetValue()
设置对象的PropertyInfo.SetValue()
。
public void SetValue(object value)
{
var valueType = value.GetType();
// Passes
if (!_propertyInfo.PropertyType.IsAssignableFrom(valueType)) return;
var valueType = value.GetType();
// Tried but this doesn't help
// var value = (dynamic) value;
// Fails
_propertyInfo.SetValue(value, Element, null);
}
如您所见,这很简单。 但是,由于object has the wrong type
,因此我不断收到TargetException
。
附加信息:对象与目标类型不匹配。
我不知道这是否指向值或要设置其属性的对象。 两者肯定都是预期的类型。 但是,值作为object
传递, Element
作为属性信息的DeclaringType
的基本类型传递。
那是问题的原因吗? 如果Element
的具体类型未知,如何解决此限制?
请参见SetValue方法。 您应该交换value
和object
参数:
_propertyInfo.SetValue(Element, value, null);
更改
if (!_propertyInfo.PropertyType.IsAssignableFrom(valueType)) return;
成
if (!_propertyInfo.DeclaringType.IsAssignableFrom(valueType)) return;
在这个例子中
abstract class Vehicle
{
public int NumberOfWheels { get; set; }
}
PropertyType
为int
而DeclaringType
为Vehicle
。
这个答案假设您确实希望value
成为目标对象。 正如其他人已经意识到的那样,您可能是说Element
是目标。 在这种情况下,您的IsAssignableFrom
是正确的,您只需要将参数交换为SetValue
(请参见Vlad的答案)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.