2016-01-22 36 views
2

我有一個類型,我只瞭解在運行時:如何將運行時已知的類型轉換爲給定類型的列表?

Type givenType = FindOutTypeOf(someObject); 

和我有以下方法:

public void SomeMethod(Type type);

,我需要與List<givenType>類型來調用它。

如何轉換給定類型(即我知道了在運行時)給定類型的列表?

+0

你的意思是如何創建給定類型的列表?如果是這樣:http://stackoverflow.com/questions/4661211/c-sharp-instantiate-generic-list-from-reflected-type –

+0

不,我需要通過類型(C#類),這是一個給定的名單鍵入,我檢索。我會改的VAR的問題 –

+1

嗯,還有你的回答仍然是類型[這裏](http://stackoverflow.com/a/4661237/3010968)你並不需要調用'Activator.CreateInstance' ,'structuredListType'就是你要找的。 –

回答

4

試試這個

var listType = typeof(List<>); 
var constructedListType = listType.MakeGenericType(givenType); 
-1

編輯:誤解了這個問題。

下面的代碼將讓你在運行時獲得對象的類型,並創建該類型,然後可以傳遞給你的方法列表:

Type givenType = typeof(someObject); 
Type listType = typeof(List<>).MakeGenericType(givenType); 
SomeMethod(listType); 
+0

更新以更好地解決您的問題。 – Chase

-1

如果我理解正確,那麼您提出的問題不能以通用和優雅的方式在強類型語言中完成。

認爲它是這樣的: 如果可以從字面上任何東西,包括在運行時生成的類型時,您不能創建一個強類型列表,其中T是將typeof()。

如果你不希望在運行時所產生的任何類型的,我會嘗試重構你的解決方案中使用泛型類型。如果無論出於何種原因需要爲每種類型執行自定義操作,則始終可以將基本類中的公共邏輯抽象出來,並創建一個派生類型,您可以在其中實現該類型的自定義邏輯。

如果這不符合您的需求,您可以使用關鍵字是C#報價,但是這並不能保證類型安全,你可以得到運行時異常。

相關問題