我有一個類型,我只瞭解在運行時:如何將運行時已知的類型轉換爲給定類型的列表?
Type givenType = FindOutTypeOf(someObject);
和我有以下方法:
public void SomeMethod(Type type);
,我需要與List<givenType>
類型來調用它。
如何轉換給定類型(即我知道了在運行時)給定類型的列表?
我有一個類型,我只瞭解在運行時:如何將運行時已知的類型轉換爲給定類型的列表?
Type givenType = FindOutTypeOf(someObject);
和我有以下方法:
public void SomeMethod(Type type);
,我需要與List<givenType>
類型來調用它。
如何轉換給定類型(即我知道了在運行時)給定類型的列表?
試試這個
var listType = typeof(List<>);
var constructedListType = listType.MakeGenericType(givenType);
編輯:誤解了這個問題。
下面的代碼將讓你在運行時獲得對象的類型,並創建該類型,然後可以傳遞給你的方法列表:
Type givenType = typeof(someObject);
Type listType = typeof(List<>).MakeGenericType(givenType);
SomeMethod(listType);
更新以更好地解決您的問題。 – Chase
如果我理解正確,那麼您提出的問題不能以通用和優雅的方式在強類型語言中完成。
認爲它是這樣的: 如果someobject可以從字面上任何東西,包括在運行時生成的類型時,您不能創建一個強類型列表,其中T是將typeof(someobject)。
如果你不希望在運行時所產生的任何類型的,我會嘗試重構你的解決方案中使用泛型類型。如果無論出於何種原因需要爲每種類型執行自定義操作,則始終可以將基本類中的公共邏輯抽象出來,並創建一個派生類型,您可以在其中實現該類型的自定義邏輯。
如果這不符合您的需求,您可以使用dynamic關鍵字是C#報價,但是這並不能保證類型安全,你可以得到運行時異常。
你的意思是如何創建給定類型的列表?如果是這樣:http://stackoverflow.com/questions/4661211/c-sharp-instantiate-generic-list-from-reflected-type –
不,我需要通過類型(C#類),這是一個給定的名單鍵入,我檢索。我會改的VAR的問題 –
嗯,還有你的回答仍然是類型[這裏](http://stackoverflow.com/a/4661237/3010968)你並不需要調用'Activator.CreateInstance' ,'structuredListType'就是你要找的。 –