2013-05-03 127 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;