我想使用 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();