如何从列表类型中获取模板类型? [复制]
Posted
技术标签:
【中文标题】如何从列表类型中获取模板类型? [复制]【英文标题】:How do you get the template type from a List Type? [duplicate] 【发布时间】:2011-02-22 06:21:20 【问题描述】:我一直在寻找这个。我想知道如何获取传递给创建列表的模板类型。例如。
List<string> listOfStrings = new List<string>();
如何从中获取字符串类型?我知道如何使用类型来获取字段并找到列表类型,但不知道其中的模板。
【问题讨论】:
【参考方案1】:在这种情况下,你可以这样得到它
Type genericType = listOfStrings.GetType().GetGenericArguments()[0];
注意,如果你在非泛型类型上尝试这个,它会失败,因为 GetGenericArguments 数组的长度将为 0,但你当然可以采取措施来控制数组的长度。
【讨论】:
【参考方案2】:您是在谈论获取存储在此列表中的项目类型吗?
listOfStrings[0].GetType()
将返回类型。
编辑:
这是正确的解决方案:
Type type = listOfStrings.GetType();
Type itemType = type.GetGenericArguments()[0];
【讨论】:
如果列表为空,或者将继承自 T 的类型添加到列表中,这将不起作用。 是的,我现在已经编辑了我的答案。【参考方案3】:但也许他想知道在调用函数时如何获取 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);
【讨论】:
我认为他不想使用反射。他只是想以“通用”方式为他的列表创建新元素。我正朝着与其他人“相反”的方向前进。我的回复已经“完整”了,但现在“更完整”了,因为我添加了一个使用示例。 我明白你的意思,但我不认为这是他要问的。请参阅他说How would I get the string type from this?
的问题部分。您无法从任何地方获取类型字符串。我认为这里没有反射的方法。
如果提问者知道如何表达他们想要的东西,世界会容易得多:-) 他们中的许多人就像向程序员询问功能的人(用户)一样迷失了方向。最后,已经有各种使用反射并得到一件事的答案。我给另一件事。没有人可以窥探 OP 的脑袋并知道他想要什么。以上是关于如何从列表类型中获取模板类型? [复制]的主要内容,如果未能解决你的问题,请参考以下文章