2011-02-06 25 views
7

danh sách Generic:Confusing kết quả của "GetElementType" trên mảng và danh sách chung

var elementType1 = typeof (List<A>).GetElementType(); 

Array:

var elementType = typeof (A[]).GetElementType(); 

Tại sao tôi chỉ nhận được các loại nguyên tố của một mảng? Làm cách nào để lấy loại phần tử của danh sách chung? (nhận xét: danh sách chung được đóng hộp)

+0

Ông có thể làm rõ những gì nhận xét của bạn "danh sách chung được đóng hộp" có nghĩa là? – Ani

+0

đóng hộp có nghĩa là bạn chỉ có danh sách này làm đối tượng. – Rookian

+0

Đó không phải là quyền anh. Quyền anh chỉ áp dụng cho các loại giá trị. – Ani

Trả lời

12

GetElementType chỉ nhận loại phần tử cho mảng, con trỏ và loại tham chiếu.

Khi ghi đè trong một lớp học có nguồn gốc, trả Type của đối tượng bao phủ hoặc gọi bằng mảng hiện tại, con trỏ hoặc tham chiếu loại

API phản chiếu không "biết "rằng List<T> là một hộp chứa chung và loại đối số của một trong các loại được tạo của nó đại diện cho loại phần tử chứa trong đó.

Sử dụng phương pháp GetGenericArguments thay vì để có được những kiểu lập luận của các loại xây dựng:

var elementType1 = typeof(List<A>).GetGenericArguments().Single(); 
+0

là cũng có một cách tiếp cận tốt để tìm hiểu xem tôi có một danh sách chung hoặc một mảng? Tôi có thể chứng minh cho null và sau đó sử dụng giải pháp của bạn, nhưng có thể có cái gì đó tốt hơn. – Rookian

+1

Array = 'type.IsArray'. ListT = 'type.GetGenericTypeDefinition() == typeof (List <>)' (Bạn cũng sẽ cần xác minh rằng kiểu là kiểu generic được xây dựng). – Ani

4
var elementType1 = typeof(List<A>).GetGenericArguments()[0]; 
var elementType = typeof(int[]).GetElementType(); 
Các vấn đề liên quan