2010-05-14 43 views
17

Tôi cần phải tạo kiểu chung, nhưng tôi không biết loại lúc biên dịch. Tôi muốn làm điều này:Khởi tạo đối tượng chung từ System.Type

Type t = typeof(whatever); 
var list = new List<t> 

điều này sẽ không biên dịch, vì t không phải là loại hợp lệ. Nhưng nó biết tất cả về một loại hợp lệ. Có cách nào để tự động tạo danh sách chung từ một System.Type như thế này? Tôi có thể cần sự phản chiếu, và đó là ok, tôi chỉ là một chút bị mất ở đây.

Trả lời

24

Như thế này:

Type t; 
Type genericListType = typeof(List<>).MakeGenericType(t); 
object list = Activator.CreateInstance(genericListType); 

Lưu ý rằng bạn chỉ có thể gán nó vào một biến kiểu object. (Mặc dù bạn có thể truyền đến giao diện IList không chung chung)

Để sử dụng biến số list, có thể bạn sẽ cần phản ánh.

+1

+1 Không biết 'Danh sách <>' là hợp pháp. tuyệt đấy. –

+1

@Igot: Chỉ trong 'typeof'. – SLaks

+0

Điều này hoạt động tốt, ngoại trừ nó là một nỗi đau để sử dụng sau đó. Mặc dù đã hoàn thành công việc. – captncraig

Các vấn đề liên quan