使用LINQ将'ArrayList'转换为'List <string>'(或'List <t>')</t> </string>

时间:2012-08-15 06:20:21

标签: c# linq collections

我想使用LINQ将ArrayList转换为List<string>。我试过ToList(),但这种方法无效:

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

4 个答案:

答案 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