2008-11-24 53 views
14

如何使用反射來創建具有自定義類的通用列表(列表<CustomClass>)?我需要能夠添加值並使用 propertyInfo.SetValue(..., ..., ...)來存儲它。作爲一些其他的數據結構,我會更好地存儲這些List <>嗎?使用反射設置屬性的類型列表<CustomClass>

編輯:

我應該指定的對象更像是這個,但是馬克Gravell的答案仍然工作。

class Foo 
{ 
    public List<string> Bar { get; set; } 
} 
+0

是字符串真的是自定義類嗎?我希望你會談論像使用反射來調用一個類MyClass,它有一個List 的屬性,其中SomeOtherClass是我做的一個類,它有一堆屬性和構造函數等...... – topwik 2009-08-20 19:48:49

+0

好的,所以字符串對於一個班級來說是不好的選擇,但它足以作爲解釋。就我所知的有限知識而言,我們可以用幾乎任何類來替換字符串,但在我要求的情況下,列表中的類和類型僅通過反射來找到。 – dragonjujo 2010-01-03 00:45:49

回答

19
class Foo 
{ 
    public string Bar { get; set; } 
} 
class Program 
{ 
    static void Main() 
    { 
     Type type = typeof(Foo); // possibly from a string 
     IList list = (IList) Activator.CreateInstance(
      typeof(List<>).MakeGenericType(type)); 

     object obj = Activator.CreateInstance(type); 
     type.GetProperty("Bar").SetValue(obj, "abc", null); 
     list.Add(obj); 
    } 
} 
1

這裏是服用名單< >類型,使之成爲名單<串>一個例子。

var list = typeof(List < >).MakeGenericType(typeof(string));

+0

這不會給你一個任何類型的列表 - 它給你一個類型 – 2008-11-24 20:08:06