我想使用 LINQ将一个转换ArrayList
为一个。List<string>
我试过ToList()
了,但这种方法不起作用:
ArrayList resultsObjects = new ArrayList();
List<string> results = resultsObjects.ToList<string>();
我想使用 LINQ将一个转换ArrayList
为一个。List<string>
我试过ToList()
了,但这种方法不起作用:
ArrayList resultsObjects = new ArrayList();
List<string> results = resultsObjects.ToList<string>();
您的代码实际上显示了一个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
真正的值是字符串。如果不是,您需要向我们提供有关如何将每个项目转换为字符串的更多信息。
我假设您的第一行是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();
您还可以使用 LINQ 的 OfType<> 方法,具体取决于您是否要在 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
您可以使用方法将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();