2016-08-03 224 views
1

我有以下代碼,但無法運行。 我想從給定的類型列表中創建一個實例列表。從類型列表中獲取實例

List<Type> types = new List<Type> 
{ 
    typeof(String), 
    typeof(Double), 
    typeof(Object) 
}; 

List<object> instances = types.Select(t => Activator.CreateInstance(t) as t); 

我得到的錯誤

> t is a variable but is used like a type 
+2

您能否將exaplin「*我無法使其運行*」更進一步? –

+0

我編輯與我得到的語法錯誤的問題。 – heltonbiker

+1

嗯,這甚至​​不會編譯,因爲你試圖把它轉換成你可以說的實際類型列表 instances = types.Select(t => Activator.CreateInstance(t))。但這仍然會在運行時中斷,因爲並非所有這些都有默認的構造函數 –

回答

2

這裏的編譯錯誤是由於這樣的事實,說爲T你不是讓編譯器自動將它轉換爲類型對象。這段代碼仍然有問題,因爲它要求列表中的所有類型都有默認構造函數(字符串沒有默認構造函數)。

+0

您的評論中的代碼有效,而我的代碼中的類型僅作爲示例。我打算創建一個'List '並使用派生類型來創建多態實例。 – heltonbiker

+0

不知道這裏的目的究竟是什麼,但有一次我寫這樣的代碼竟然是瘋狂的臭編碼。 –

+0

我想要我的應用程序執行一些可能的計算。對於我創建的每個'Selection'實例,我都需要計算,所以我爲每種類型的計算都有一個類。我想在應用程序啓動時通過IoC或動態dll加載創建一個我可以實例化的所有可能計算的列表。因此,如果我有一個基類「計算」和子類「MaxCalculation」,「AverageCalculation」等。對於我創建的每個'Selection',我需要'Calculation'的每個可用子類的一個實例。我完全同意我的代碼聞到現在的樣子。 – heltonbiker