如何通过删除泛型参数</t>从typeof(List <t>)获取typeof(List&lt;&gt;)

时间:2012-12-26 10:04:15

标签: c# generics

我有typeof(List<T>)作为Type对象,但我需要typeof(List<>)我可以使用MakeGenericType()来检索List的类型对象,是否可能?

更新:伙计们,谢谢。这似乎是一个微不足道的问题。但无论如何,我支持所有人并接受了第一个答案。

4 个答案:

答案 0 :(得分:4)

您可以使用Type.GetGenericTypeDefinition

答案 1 :(得分:3)

如果我正确地解决了您的问题,您有一个通用类型(List<int>)和另一种类型(比方说long),您想要制作一个List<long>。这可以这样做:

Type startType = listInt.GetType();   // List<int>
Type genericType = startType.GetGenericTypeDefinition()  //List<T>
Type targetType = genericType.MakeGenericType(secondType) // List<long>

但是,如果您使用的类型确实是列表,那么如果您实际使用它可能会更清楚:

Type targetType = typeof(List<>).MakeGenericType(secondType) // List<long>

答案 2 :(得分:1)

答案是Type.GetGenericTypeDefinition:
http://msdn.microsoft.com/en-us/library/system.type.getgenerictypedefinition.aspx

示例:

var t = typeof(List<string>);
var t2 = t.GetGenericTypeDefinition();

然后可以这样做:

var t = typeof(List<>);
var t2 = t.MakeGenericType(typeof(string));

答案 3 :(得分:1)

我认为你的意思是实现类似下面的东西?

var list = new List<int>();
Type intListType = list.GetType();
Type genericListType = intListType.GetGenericTypeDefinition();
Type objectListType = genericListType.MakeGenericType(typeof(object));