2013-05-03 82 views
0

尝试使用反射设置嵌套属性两个级别的值,但获取对象时不会出现目标对象错误。类型化的obj应该是这样的: project.EnvironmentalAessment.SomeDocument.Review嵌套属性的C#反射

var _review = new Review() { .... }; 
var docProp = project.EnvironmentalAssessment.GetType().GetProperty(techStudy.DocumentProperty); 
    var docType = docProp.PropertyType; 
    var reviewProp = docType.GetProperty("Review"); 
    var reviewType = reviewProp.GetType(); 

project.EnvironmentalAssessment 
     .GetType() 
     .GetProperty(techStudy.DocumentProperty) 
     .PropertyType 
     .GetProperty("Review") 
     .SetValue(reviewProp, _review, null); 

任何有识之士将不胜感激。谢谢!

+0

我想你在列出你得到的错误时犯了一个错字。你可以检查并更新与错误的确切文字的问题? – 2013-05-03 14:06:36

回答

1
project.EnvironmentalAssessment 
      .GetType() 
      .GetProperty("SomeDocument") 
      .PropertyType 
      .GetProperty("Review") 
      .SetValue(project.EnvironmentalAssessment.SomeDocument, _review, null); 

或者,如果你不知道该文档属性的名称:

var docProp = project.EnvironmentalAssessment 
      .GetType() 
      .GetProperty(techStudy.DocumentProperty); 

docProp.PropertyType.GetProperty("Review") 
      .SetValue(docProp.GetValue(project.EnvironmentalAssessment), _review, null); 
1

你也可以使用动态类型来解决这个问题,这将使它更容易。我不知道它在性能方面是否比使用反射效率更高。

dynamic project = ...; 
var review = new Review() { .... }; 
project.EnvironmentalAessment.SomeDocument.Review = review;