c# - 如何从 T 未知的 ICollection<T> 中检索数据

标签 c# .net reflection

我知道我的类型是 ICollection<T> .我知道T是原始类型,我知道 T可以用 ToString() 变成一个字符串.我有 Type T 的对象(通过使用:Type genericType = info.PropertyType.GenericTypeArguments[0];

我不知道如何将该集合中的项目取出并放入另一个已知类型的集合中(如 List<string>)。值得庆幸的是,因为我想要的只是它的项目的值作为一个字符串,我可以使用 ToString()在每一个上,不管它是什么类型(仅限于原语)。

我在我的程序的另一个区域使用它来获取一个类的所有属性的值,只要它们是原始的。我试过类型转换 Type对象作为 ICollection<T> 的通用参数那没有用。

编辑:我有一个 object我知道是 ICollection<T> ,但在将其转换为 ICollection<T> 之前,我似乎无法在其上使用 LINQ , 我不能转换成那个因为 T是“未知”(我已经检索到 TypeT,但我不确定在哪里运行它)。

最佳答案

由于您从通用集合和 ICollection<T> 开始工具 IEnumerable<T> ,您可以使用 LINQ:

List<string> res = coll.Select(elem => elem.ToString()).ToList();

编辑 - 您可以将对象转换为非泛型 IEnumerableICollection , 然后调用 Cast<object>在上面得到一个通用集合(你可以这样做,因为你只想在元素上调用 ToString):

object obj = new List<int> { 1, 2, 3 };

IEnumerable res = obj as IEnumerable;
List<string> result = res.Cast<object>().Select(e => e.ToString()).ToList();

foreach (var e in result)
    Console.WriteLine(e);

关于c# - 如何从 T 未知的 ICollection<T> 中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669421/

相关文章:

c# - PRISM + MEF -- 导入 & ImportMany

c# - 普通 Windows 10 PC 的 USB 到 GPIO/SPI/I2C/UART?类似于 Raspberry Pi 40 针接头

.net - Oracle 尝试加载格式不正确的程序

java - 是否可以通过反射获取字段,如果不存在则不抛出异常

java - 连接包名和类名(java 反射)

c# - wpf windows 位置问题

c# - 从 BindingList 中删除重复项

c# - .NET 2.0 的 WCF

.net - 如何将 'Tags' 添加到我的简单博客文章类库和存储库中?

Java 代码生成(元编程、反射、wtv)