2012-01-30 61 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

相關問題