2011-12-26 53 views
0

我正在開發一個項目,我必須通過數據模型來反映數據模型上每個屬性的類型。我的代碼適用於除泛型集合之外的所有情況。我必須能夠知道IList中的T是什麼。在IList中查找<T><T>使用反射

,我有以下數據模型

public class ArrryOfObjects 
{ 
    public NestModelNestedClass NestClass { get; set; } 
    public int IntObject { get; set; } 
    public IList<NestModelNestedClass> ListOfObjects { get; set; } 
} 

我見過一對夫婦的例子,像https://stackoverflow.com/a/1043778/136717如何做到這一點,但他們使用的type.GetGenericTypeDefinition()要獲得類型。但在我的示例中,我不能使用它,因爲'type.IsGeneric.Parameter'爲false。

我在評論類型文檔,不明白如何做到這一點。

回答

4

試試這個:

var t = typeof(ArrryOfObjects) 
    .GetProperty("ListOfObjects") 
    .PropertyType 
    .GetGenericArguments()[0]; 

這是它如何工作的:

  • ArrryOfObjects類型...
  • 獲得所謂ListOfObjects財產...
  • 得到該屬性的類型...
  • 我們知道它是一個至少具有o ne類型參數。
  • 我們得到的第一個類型參數 - 在你的榜樣應該是typeof(NestModelNestedClass)

附: GetGenericTypeDefinition得到你typeof(IList<>),它的通用類型IList<NestModelNestedClass>是一個通用的實例。

+0

謝謝。我的實際代碼與您的基本相同,除了GetGenericArguements()中的[0]。 – 2011-12-26 16:38:18

相關問題