2

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

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

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

GetRawGenericType(type) == genericListType

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

评论:

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

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

提前感谢您花时间。

4

2 回答 2

4

Type.GetGenericTypeDefinition就是你要找的。

于 2012-10-19T08:17:11.880 回答
3

使用GetGenericTypeDefinition方法

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

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

节目

true
于 2012-10-19T08:19:50.230 回答