如何使用类型参数从泛型类型中提取原始泛型类型

时间:2012-10-19 08:14:28

标签: c# .net generics reflection

假设我有一个泛型类型的运行时对象和同一类的原始泛型类型,例如。

var type = (new List<Int32>()).GetType();
var genericListType = typeof(List<>);

我需要一种GetRawGenericType方法,所以表达式

GetRawGenericType(type) == genericListType

返回true。有没有办法实现这个?

说明:

我不知道对象的类型可能是任何泛型类型。 在我写的代码中,我必须知道确切的泛型类型,因为它将用作Dictionary中的键,例如:

private readonly Dictionary<Type, TValue> Mapping = 
    new Dictionary<Type, TValue> { 
            {typeof(IEnumerable<>), *SomeValue*},
            ...
        }

提前感谢你花时间。

2 个答案:

答案 0 :(得分:4)

Type.GetGenericTypeDefinition就是你要找的。

答案 1 :(得分:3)

使用GetGenericTypeDefinition method

var type = (new List<Int32>()).GetType();
var genericListType = typeof(List<>);

Console.WriteLine(type.GetGenericTypeDefinition() == genericListType);

显示

true