如何从列表类型中获取模板类型?

时间:2011-02-22 06:21:20

标签: c# templates reflection types

我一直在寻找这个问题。我想知道如何获取传递给创建列表的模板类型。例如。

List<string> listOfStrings = new List<string>();

我如何从中获取字符串类型?我知道如何使用类型来获取字段并查找列表类型,但不知道其中的模板。

3 个答案:

答案 0 :(得分:2)

在这种情况下,你可以像这样得到它

Type genericType = listOfStrings.GetType().GetGenericArguments()[0];

请注意,如果您在非泛型类型上尝试此操作,它将失败,因为GetGenericArguments数组的长度将为0,但您当然可以采取措施来控制数组的长度。

答案 1 :(得分:0)

您是在谈论获取此列表中存储的项目类型吗?

listOfStrings[0].GetType()

将返回您的类型。

编辑:

这是正确的解决方案:

Type type = listOfStrings.GetType();
Type itemType = type.GetGenericArguments()[0]; 

答案 2 :(得分:0)

但也许他想知道如何在调用函数时获得T ...

void MyFunc<T>(List<T> list) {
    /// T is the type passed to the List<T>, so for a List<int>, T is int
    T element = default(T);
    list.Add(element);
}