7

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

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

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

type == typeof( MyType<> )

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

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

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

4

1 回答 1

9

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

if (type.IsGenericType
    && type.GetGenericTypeDefinition() == typeof(MyType<>))
于 2013-05-02T02:53:32.067 回答