3

我有typeof(List<T>)一个 Type 对象,但我需要typeof(List<>)它可以MakeGenericType()用来检索 List 的类型对象,这可能吗?

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

4

4 回答 4

4

如果我正确地理解了您的问题,那么您有一个泛型类型 ( List<int>) 和另一种类型 (比如说long),并且您想要创建一个List<long>. 可以这样做:

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

However, if the types you are working with are indeed lists, it might be clearer if you actually used:

Type targetType = typeof(List<>).MakeGenericType(secondType) // List<long>
于 2012-12-26T10:14:06.560 回答
3

您可以使用Type.GetGenericTypeDefinition.

于 2012-12-26T10:09:03.313 回答
1

我假设您的意思是实现以下目标?

var list = new List<int>();
Type intListType = list.GetType();
Type genericListType = intListType.GetGenericTypeDefinition();
Type objectListType = genericListType.MakeGenericType(typeof(object));
于 2012-12-26T10:11:53.213 回答
0

答案是 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));
于 2012-12-26T10:10:02.383 回答