PropertyInfo.SetValue 对象与目标类型不匹配

2024-01-04

我有一个类似的错误this one https://stackoverflow.com/questions/755646/setvalue-on-propertyinfo-instance-error-object-does-not-match-target-type-c-sh,但不幸的是不是同样简单的解决方案。这是代码:

public virtual void MapObject(T obj, IViewModel<T> viewModel, ITPSDataAccess dataAccess)
{
    var objProps = obj.GetType().GetProperties();
    var dtoProps = viewModel.GetType().GetProperties();
    foreach (var dtoProp in dtoProps)
    {
        var objProp = dtoProps.SingleOrDefault(x => x.Name == dtoProp.Name);
        if (objProp != null)
        {
            var dtoVal = dtoProp.GetValue(viewModel, null);
            objProp.SetValue(obj, dtoVal, null); // ERROR HERE
        }
    }
     ...
}

错误发生在指示的点,指出“对象与目标类型不匹配”。看起来我正在传递要设置的正确对象 - 因此我无法解决问题。

我也尝试听取建议这个解决方案 https://stackoverflow.com/questions/3443274/cannot-get-propertyinfo-setvalue-to-set-the-value-on-my-object,并检查我尝试设置的引发异常的属性类型 - 有问题的属性是一个字符串,并且设置器似乎没有被破坏,因为它在正常的非反射情况下工作。


错误似乎在这里:

var objProp = dtoProps.SingleOrDefault(x => x.Name == dtoProp.Name);

我想你的意思是:

var objProp = objProps.SingleOrDefault(x => x.Name == dtoProp.Name); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PropertyInfo.SetValue 对象与目标类型不匹配 的相关文章

随机推荐