检查两个泛型类型是否相等

时间:2013-05-02 02:52:14

标签: c# generics types

我需要查找某个类型是否是某种泛型类型。

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

此检查不起作用,但这是我要检查的内容。如果类型属于该泛型类型,则无论T是什么。

type == typeof( MyType<> )

这确实有效,但感觉很脏。它也可能是错误的,因为它不是FullName

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

我假设有办法做到这一点,但我还没找到。使用IsAssignableFrom将不起作用,因为我需要知道当前类型,而不是其中一个父类是否相同。

1 个答案:

答案 0 :(得分:6)

如果对象的具体类型为MyType<T>,则此方法有效。它不适用于从MyType<T>派生的类型的实例,如果MyType<T>是接口类型,则无效。

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