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

Jos*_*ose 6 c# generics types

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

class MyType<T> {}
var instance = new MyType<int>();
var type = instance.GetType();
Run Code Online (Sandbox Code Playgroud)

此检查不起作用,但这是我想要检查的.如果类型是该泛型类型,则无论是什么类型T.

type == typeof( MyType<> )
Run Code Online (Sandbox Code Playgroud)

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

type.Name == typeof( MyType<> ).Name
Run Code Online (Sandbox Code Playgroud)

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

Sam*_*ell 6

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

if (type.IsGenericType
    && type.GetGenericTypeDefinition() == typeof(MyType<>))
Run Code Online (Sandbox Code Playgroud)