1 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
基本上,如果您有一個(gè)類型 object Type theType,則需要執(zhí)行以下操作:
var listType = typeof(List<>);
var typeParams = new [] {theType};
var listOfTType = listType.MakeGenericType(typeParams);
var newListOfT = Activator.CreateInstance(listOfTType);
此時(shí),您有一個(gè) type 變量object,但它引用了一個(gè) type 對(duì)象List<WhateverYourTypeIs>。說,theTypeis typeof(int),那么你將有一個(gè) 的對(duì)象List<int>。不過,將它轉(zhuǎn)換為可用的東西是另一個(gè)問題。如果你想在這個(gè)列表中添加一些東西,我懷疑最好的方法是MethodInfo為Add方法和Invoke它獲取一個(gè)。
如果類型具有默認(rèn)構(gòu)造函數(shù)并且創(chuàng)建起來不太昂貴,我想到了另一種方法來做到這一點(diǎn)。這是一個(gè)示例(創(chuàng)建一個(gè)List<int>- 但這只是我編碼的方式):
var type = typeof(int);
var dummy = Activator.CreateInstance(type);
var listOfType = new[] {dummy}.ToList();
完成后,listOfType變量的類型為 aList<object>但指的是 a List<int>。它主要是可行的 - 例如,您可以調(diào)用Add(object someObj)它。你不會(huì)得到編譯類型參數(shù)類型檢查,但你可以使用它。
- 1 回答
- 0 關(guān)注
- 189 瀏覽
添加回答
舉報(bào)