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

10

我需要找出一个类型是否是特定的泛型类型。

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

这个检查不起作用,但这就是我想要检查的内容。如果类型是那种通用类型,不管 T 是什么。

type == typeof( MyType<> )

这个方法可以运行,但感觉不太优雅。而且因为它不是FullName,所以可能是错误的。

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

我假设有一种方法可以做到这一点,但我还没有找到。使用IsAssignableFrom不起作用,因为我需要知道当前类型是否相等,而不是其父类型之一。

1个回答

12

如果对象的具体类型是MyType<T>,则这将起作用。对于从MyType<T>派生出的类型实例,这不起作用,并且如果MyType<T>是接口类型,则它也不起作用。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接