2012-08-15 80 views

回答

23

您的代码实际上显示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内的值确实是字符串。如果他们不是,您需要向我们提供更多关于您希望每个项目转换为字符串的信息。

2

我假设你的第一行是为了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(); 
0

可以使用ArrayList.ToArray()实现方法具ArrayList元素转换为object[]阵列d。

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(); 
0

您还可以使用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); 

输出:?在.NET中,你如何转换一个ArrayList到一个强类型的泛型列表,而不使用foreach]

Me 
You 
相关问题