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

本文关键字:泛型类型 是否 两个 检查 | 更新日期: 2023-09-27 18:11:40

我需要找到一个类型是否是某个泛型类型。

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

这个检查不起作用,但这是我想要检查的。如果类型是该泛型类型,则不管T是什么。

type == typeof( MyType<> )

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

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

我想有办法做到这一点,但我还没有找到。使用IsAssignableFrom将不起作用,因为我需要知道当前类型(而不是它的父类型(是否相等。

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

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

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