2013-05-02 43 views
6

Tôi cần phải tìm xem loại có phải là loại chung nhất định hay không.Kiểm tra xem hai loại chung có bằng nhau không

class MyType<T> {} 
var instance = new MyType<int>(); 
var type = instance.GetType(); 

Kiểm tra này không hiệu quả, nhưng đây là những gì tôi muốn kiểm tra. Nếu loại này thuộc loại chung chung, bất kể loại T là gì.

type == typeof(MyType<>) 

Điều này có tác dụng nhưng cảm thấy bẩn. Nó cũng có thể sai vì nó không phải là FullName.

type.Name == typeof(MyType<>).Name 

Tôi giả sử có cách để thực hiện việc này nhưng tôi chưa tìm thấy. Sử dụng IsAssignableFrom sẽ không hoạt động, bởi vì tôi cần biết loại hiện tại và không phải là một trong số đó là cha mẹ, đều bình đẳng.

Trả lời

6

Điều này sẽ hoạt động nếu loại bê tông của đối tượng là MyType<T>. Nó sẽ không hoạt động đối với các trường hợp của các kiểu bắt nguồn từ MyType<T> và sẽ không hoạt động nếu MyType<T> là loại giao diện.

if (type.IsGenericType 
    && type.GetGenericTypeDefinition() == typeof(MyType<>)) 
Các vấn đề liên quan