2011-08-19 26 views

Trả lời

2

t là đối tượng Kiểu được tạo khi chạy. Generics mong đợi một tên kiểu, được giải quyết tại thời gian biên dịch. Để tạo một generic khi chạy, bạn phải sử dụng MakeGenericType

Ví dụ:

Activator.CreateInstance(typeof(GenericThing<>).MakeGenericType(t)); 
2

t là một trường hợp đối tượng của loại Type, ví dụ: một cái gì đó chỉ tồn tại trong thời gian chạy. Generics làm việc tại thời gian biên dịch và mong đợi tên của loại.

Tôi nghĩ rằng bạn đồng ý rằng những điều sau đây không có ý nghĩa:

Type t = thing.GetType() 
TypeOfThing instance = new t(); 

Và đối với những lý do tương tự, bạn không thể vượt qua một trường hợp kiểu như tham số của một chung.

1

Type là một lớp học mà đại diện một loại chứ không phải thực sự là một, vì vậy bạn không thể sử dụng một thể hiện của Type ở một nơi mà hy vọng một loại hoặc kiểu tham số.

0

bạn nên làm điều gì đó như sau:

var youGeneric = typeof(GenericThing<>).MakeGenericType(t) 
             .GetConstructor(Type.EmptyTypes) 
             .Invoke(null); 
Các vấn đề liên quan