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;
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.
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)));
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;
}
}
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
etToList
sont des méthodes d'extension dansSystem.Linq.Enumerable
classe.