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

时间:2012-01-30 03:57:19

标签: c# reflection

我和this one有类似的错误,但遗憾的是不是同一个简单的解决方案。这是代码:

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
        }
    }
     ...
}

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

我也尝试接受this solution的建议,并检查我试图设置的属性类型抛出异常 - 所讨论的属性是一个字符串,并且不会出现setter因为它在正常的,不反思的情况下工作而被打破。

1 个答案:

答案 0 :(得分:3)

错误似乎在这里:

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

我认为你的意思是:

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