2013-05-02 2 views
6

Мне нужно найти, является ли тип определенным родовым типом.Проверьте, являются ли два общих типа равными

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

Эта проверка не работает, но это то, что я хочу проверить. Если тип этого родового типа, независимо от того, что такое T.

type == typeof(MyType<>) 

Это действительно работает, но чувствует себя грязным. Это также может быть неправильным, поскольку это не FullName.

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

Я предполагаю, что есть способ сделать это, но я не нашел его. Использование IsAssignableFrom не будет работать, потому что мне нужно знать, равны ли текущий тип, а не один из его родителей.

ответ

6

Это будет работать, если конкретный тип объекта MyType<T>. Он не будет работать для экземпляров типов, полученных из MyType<T>, и не будет работать, если MyType<T> является типом интерфейса.

if (type.IsGenericType 
    && type.GetGenericTypeDefinition() == typeof(MyType<>))