2012-01-30 179 views
3

我与this one有类似的错误,但不幸的是不是简单的解决方案。以下是代码:PropertyInfo.SetValue对象与目标类型不匹配

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

添加'objProp.PropertyType'和'dtoVal.GetType()'来监视调试窗口,在调用'objProp.SetValue(...)'的时候设置一个断点。当断点被击中时,这两个表达式评估的是什么?他们需要是一样的。 – 2012-01-30 04:05:09

回答

3

这个错误似乎是在这里:

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

我想你的意思是:

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

THANKs,男人 - 那是你盯着看30分钟的人之一,需要3秒才能看到它......! – Hanshan 2012-01-30 04:14:06

相关问题