2013-05-02 59 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<>))