我和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因为它在正常的,不反思的情况下工作而被打破。
答案 0 :(得分:3)
错误似乎在这里:
var objProp = dtoProps.SingleOrDefault(x => x.Name == dtoProp.Name);
我认为你的意思是:
var objProp = objProps.SingleOrDefault(x => x.Name == dtoProp.Name);