2011-11-03 70 views
1

這就是我想要做的事:C# - 在泛型方法使用運行時定義的類型作爲參數

PropertyInfo[] propertyInfos = GetProperties(typeofEntity); 
Type t = propertyInfos[0].GetType(); 
IList<t.GetType()> magicalList; 

讓我們說是t恰好是類型的Int32,然後我想要列表是

IList<Int32> 

這是不行的,因爲它只是一樣做

IList<Type> 

我不想寫了十幾蒙上手動查找類型。

任何想法? 感謝

編輯---------------

我這樣做是因爲我wanto傳遞對象沒有一個NHibernate的查詢,並自動創建相應的規定 - 對象屬性的值。

例:

Person{ 
public string Name 
public Phone Phone 
} 

Phone{ 
public int Number 
} 

我希望能夠創建一個帶有電話的人,並把它傳遞在NHibernate的查詢,使用DetachedFor <>。然後我想自動爲Person的'複雜'屬性的屬性創建標準,比如Phone.Number。

+0

你可以添加一些代碼來描述你爲什麼這樣做?可能是一個更優雅的解決方案。 – user7116

回答

3

嘗試:

var genericType = typeof (List<>).MakeGenericType(t.GetType()); 
var magicalList = Activator.CreateInstance(genericType); 
4

您只能在編譯時使用已知類型的泛型。
在您的代碼中,表達式magicalList[0]將不具有編譯時類型。

您可以使用非通用的IList或使用反射做所有事情。

1

有方法System.Type.MakeGenericType至極幫助創建泛型類型傳遞的參數。在你的情況下,你有主要類型:

var oGenericType = typeof (IList<>); 
var oSpecificType = oGenericType.MakeGenericType(typeof(int));