Chắc chắn bạn có thể:
var fooList = Activator
.CreateInstance(typeof(List<>)
.MakeGenericType(Foo.GetType()));
Vấn đề ở đây là rằng fooList
là thuộc loại object
, do đó bạn vẫn sẽ phải truyền đến loại "có thể sử dụng". Nhưng loại này sẽ như thế nào? Là cấu trúc dữ liệu hỗ trợ thêm và tìm kiếm các đối tượng thuộc loại T
List<T>
(hoặc thay vì IList<>
) không phải là biến thể trong T
để bạn không thể đúc List<Foo>
đến List<IFoo>
nơi Foo: IFoo
. Bạn có thể truyền nó đến một số IEnumerable<T>
là biến thể trong T
.
Nếu bạn đang sử dụng C# 4.0, bạn cũng có thể cân nhắc việc đúc fooList
thành dynamic
để ít nhất bạn có thể sử dụng nó làm danh sách (ví dụ: thêm, tra cứu và xóa đối tượng).
Xem xét tất cả điều này và thực tế là bạn không có bất kỳ kiểu thời gian biên dịch nào khi tạo kiểu bất kỳ lúc nào, chỉ cần sử dụng List<object>
có lẽ là cách tốt nhất/thực dụng nhất trong trường hợp này.
Mọi thứ dừng bạn chỉ cần tạo một 'Danh sách
@ Flynn1179, hãy để tôi xem cách bạn làm điều đó. – xport
'Danh sách