2013-09-28 69 views
-1

如何基於下面的代碼使用反射來實例化數組屬性?c#使用反射檢索數組元素的類型

public class Foo 
{ 
    public Foo() 
    { 
     foreach(var property in GetType().GetProperties()) 
     { 
     if (property.PropertyType.IsArray) 
     { 
      // the line below creates a 2D array of type Bar. How to fix? 
      var array = Array.CreateInstance(property.PropertyType, 0); 
      property.SetValue(this, array, null); 
     } 
     } 
    } 
    public Bar[] Bars {get;set;} 
} 

public class Bar 
{ 
    public string Name {get;set;} 
} 

回答

3

Array.CreateInstance第一個參數期望陣列的元素類型。您可以通過檢查property.PropertyType.IsArray的數組類型(具體地說,是Bar[] - 即Bar元素的數組)來傳遞整個屬性類型。

爲了得到一個陣列型的元素類型,使用其GetElementType方法:

var array = Array.CreateInstance(property.PropertyType.GetElementType(), 0); 

我想在需要時你將取代傳遞給具有較高數目的第二個參數的零,除非你實際上只需要空數組。

+0

我在找什麼感謝。 –