web-dev-qa-db-fra.com

Comment convertir un ArrayList en une liste générique fortement typée sans utiliser de foreach?

Voir l'exemple de code ci-dessous. J'ai besoin que ArrayList soit une liste générique. Je ne veux pas utiliser foreach.

ArrayList arrayList = GetArrayListOfInts();  
List<int> intList = new List<int>();  

//Can this foreach be condensed into one line?  
foreach (int number in arrayList)  
{  
    intList.Add(number);  
}  
return intList;    
56
James Lawruk

Essayez ce qui suit

var list = arrayList.Cast<int>().ToList();

Cela ne fonctionnera que si vous utilisez le compilateur C # 3.5 car il tire parti de certaines méthodes d'extension définies dans le framework 3.5.

111
JaredPar

Ceci est inefficace (il crée un tableau intermédiaire inutilement) mais est concis et fonctionnera sur .NET 2.0:

List<int> newList = new List<int>(arrayList.ToArray(typeof(int)));
10
mqp

Que diriez-vous d'utiliser une méthode d'extension?

De http://www.dotnetperls.com/convert-arraylist-list :

using System;
using System.Collections;
using System.Collections.Generic;

static class Extensions
{
    /// <summary>
    /// Convert ArrayList to List.
    /// </summary>
    public static List<T> ToList<T>(this ArrayList arrayList)
    {
        List<T> list = new List<T>(arrayList.Count);
        foreach (T instance in arrayList)
        {
            list.Add(instance);
        }
        return list;
    }
}
4
Will WM

Dans .Net standard 2 en utilisant Cast<T> est le meilleur moyen:

ArrayList al = new ArrayList();
al.AddRange(new[]{"Micheal", "Jack", "Sarah"});
List<int> list = al.Cast<int>().ToList();

Cast et ToList sont des méthodes d'extension dans System.Linq.Enumerable classe.

1
Sina Lotfi