我想使用LINQ将ArrayList
转换为List<string>
。我试过ToList()
,但这种方法无效:
ArrayList resultsObjects = new ArrayList();
List<string> results = resultsObjects.ToList<string>();
答案 0 :(得分:30)
您的代码实际上显示的是List<ArrayList>
而不是ArrayList
。如果你真的只有一个ArrayList
,你可能想要:
ArrayList resultObjects = ...;
List<string> results = resultObjects.Cast<string>()
.ToList();
Cast
调用是必需的,因为ArrayList
是弱类型的 - 它只实现IEnumerable
,而不是IEnumerable<T>
。 LINQ to Objects中的几乎所有LINQ运算符都基于IEnumerable<T>
。
假设ArrayList
内的值确实是字符串。如果不是,您需要向我们提供有关您希望如何将每个项目转换为字符串的更多信息。
答案 1 :(得分:3)
我认为你的第一行应该是ArrayList resultsObjects = new ArrayList();
。
如果ArrayList
中的对象属于特定类型,则可以使用Cast<Type>
扩展方法:
List<string> results = resultsObjects.Cast<string>().ToList();
如果ArrayList
中有任意对象要将转换转换为字符串,则可以使用:
List<string> results = resultsObjects.Cast<object>().Select(x => x.ToString())
.ToList();
答案 2 :(得分:0)
您可以使用ArrayList
方法将object[]
元素转换为ArrayList.ToArray()
数组。
List<ArrayList> resultsObjects = new List<ArrayList>();
resultsObjects.Add(new ArrayList() { 10, "BB", 20 });
resultsObjects.Add(new ArrayList() { "PP", "QQ" });
var list = (from arList in resultsObjects
from sr in arList.ToArray()
where sr is string
select sr.ToString()).ToList();
答案 3 :(得分:0)
你也可以使用LINQ的OfType&lt;&gt;方法,取决于是否要在arrayList中的某个项目不能转换为所需类型时引发异常。如果您的arrayList中包含非字符串的对象,OfType()将忽略它们。
var oldSchoolArrayList = new ArrayList() { "Me", "You", 1.37m };
var strings = oldSchoolArrayList.OfType<string>().ToList();
foreach (var s in strings)
Console.WriteLine(s);
输出:
Me
You