2012-08-15 22 views
15

Quiero convertir un ArrayList en un List<string> usando LINQ. Probé ToList() pero tal método no está funcionando:Convierta 'ArrayList' en 'Lista <string>' (o 'Lista <T>') usando LINQ

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

duplicado Posible de (http://stackoverflow.com/ preguntas/786268/in-net-how-do-you-convert-an-arraylist-to-a-highly-typed-generic-list-withou) –

Respuesta

23

Su código realidad muestra una List<ArrayList> en lugar de una sola ArrayList. Si usted está realmente tiene sólo una ArrayList, lo que probablemente quiere: se requiere

ArrayList resultObjects = ...; 
List<string> results = resultObjects.Cast<string>() 
            .ToList(); 

La llamada Cast porque ArrayList tipos débiles - que sólo implementa IEnumerable, no IEnumerable<T>. Casi todos los operadores LINQ en LINQ to Objects se basan en IEnumerable<T>.

Suponiendo que los valores dentro de ArrayList realmente son cadenas. Si no es así, deberá proporcionarnos más información sobre cómo desea que cada artículo se convierta en una cadena.

2

Supongo que su primera línea estaba destinada a ser ArrayList resultsObjects = new ArrayList();.

Si los objetos dentro de la ArrayList son de un tipo específico, puede utilizar el método Cast<Type> extensión:

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

Si hay objetos arbitrarios en ArrayList que desea convertir en cadenas, que pueda utilizar esto:

List<string> results = resultsObjects.Cast<object>().Select(x => x.ToString()) 
                .ToList(); 
0

puede convertir ArrayList elementos para object[] matriz mediante ArrayList.ToArray() metho re.

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

También puede utilizar OfType <> método de LINQ, dependiendo de si se desea elevar una excepción si uno de los artículos en su arrayList no es convertible al tipo deseado. Si su arrayList tiene objetos que no son cadenas, OfType() los ignorará.

var oldSchoolArrayList = new ArrayList() { "Me", "You", 1.37m }; 
var strings = oldSchoolArrayList.OfType<string>().ToList(); 
foreach (var s in strings) 
    Console.WriteLine(s); 

de salida: [? En .Net, ¿cómo convertir un ArrayList a una lista genérica inflexible sin utilizar un foreach]

Me 
You 
Cuestiones relacionadas