19

我想使用 LINQ将一个转换ArrayList为一个。List<string>我试过ToList()了,但这种方法不起作用:

ArrayList resultsObjects = new ArrayList();
List<string> results = resultsObjects.ToList<string>();
4

4 回答 4

34

您的代码实际上显示了一个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真正的值是字符串。如果不是,您需要向我们提供有关如何将每个项目转换为字符串的更多信息。

于 2012-08-15T06:25:52.937 回答
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();
于 2012-08-15T06:25:59.613 回答
1

您还可以使用 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
于 2017-01-02T21:28:24.803 回答
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();
于 2012-08-15T06:38:37.380 回答