2011-03-17 136 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

相关问题