2011-03-17 134 views
1

HI,使用反射覆制對象屬性到另一個對象

我有下面的代碼,但得到錯誤的prop.SetValue聲明「對象不匹配目標類型」 。但是這些類型都是Int32。

private UniqueProjectType CreateUniqueProjectType(TBR.Domain.Project project) 
    { 
     UniqueProjectType type = new UniqueProjectType(); 

     foreach (PropertyInfo prop in type.GetType().GetProperties()) 
     { 
      if (prop.Name == "ID") 
      {} 
      else if (prop.Name == "PayFrequency") 
       type.PayFrequency = _tbrService.GetEmployee((int)project.EmployeeID).PayFrequency; 
      else 
       prop.SetValue(type, prop.GetValue(project, null), null); 

     } 

     return type; 
    } 
+0

如果看到「SetValue()」和「GetValue()」方法的聲明以及它的類型會很有幫助,否則我們只能假定發生了什麼。 – 2011-03-17 11:51:26

+0

@Raphael B .:他們內置的.NET類型 – 2011-03-17 11:56:04

+0

也許Raphael B.意味着這將有助於看到什麼領域崩潰了 - 需要知道數據類型等。 – 2011-03-17 11:59:14

回答

2

我覺得這裏的漁獲:

prop.GetValue(project, null); 

道具是特定於UniqueProjectTypeprojectTBR.Domain.Project型。我認爲你應該得到TBR.Domain.Project的所有屬性,並找到一個具有相應名稱的屬性。

+2

+1因爲你是48秒比我快。 – 2011-03-17 12:00:10

2

我想你應該調用對應於Project類型的PropertyInfo上的GetValue。 PropertyInfo實例綁定到特定的類型。

基本上,對於UniqueProjectType類型的每個屬性信息,您必須在具有相同名稱的Project類型上查找PropertyInfo。然後,使用相應的PropertyInfo爲兩個對象調用GetValue和SetValue。

+0

+1是一項很好的運動。 – 2011-08-22 18:26:11

相關問題