Notez que la quelque chose va devoir énumérer la liste de tableau pour construire le List<T>
; C'est seulement une question de savoir si vous le faites vous-même ou si vous le laissez à une autre méthode (cadre/utilitaire).
Si c'est un unique, la solution que vous souhaitez éviter (en utilisant un « in situ » boucle foreach
pour faire la conversion) est une option tout à fait raisonnable. Si vous vous trouvez assez souvent, vous pouvez extraire cela dans une méthode d'utilité générique, comme dans la réponse de cdhowie.
Si votre restriction est seulement que vous devez cible .NET 2.0 (mais peut utiliser C# 3), pensez à LINQBridge, qui est une ré-implémentation de LINQ to Objects pour .NET 2.0. Cela vous permettra d'utiliser l'échantillon Cast
que vous avez fourni sans modification. Cela fonctionnera aussi sur C# 2, mais vous n'aurez pas les avantages de la syntaxe extension-méthode, meilleure inférence de type, etc.
Si vous ne vous souciez pas de la performance et que vous ne voulez pas aller à la peine d'écrire une méthode utilitaire, vous pouvez utiliser la méthode pour aider ArrayList.ToArray
en construction sur, en créant un tableau intermédiaire qui joue bien avec List<T>
(ce n'est pas tout ce plus court qu'un foreach):
ArrayList arrayList = ...
// Create intermediary array
BookingData[] array = (BookingData[]) arrayList.ToArray(typeof(BookingData));
// Create the List<T> using the constructor that takes an IEnumerable<T>
List<BookingData> list = new List<BookingData>(array);
Enfin, je suggère, si possible d'abandonner l'utilisation des classes de collection non génériques obsolètes tout à fait.
En C# vous avez vraiment besoin de lancer 'ArrayList' en' List'? – khachik
@khachik: 'ArrayList' est de type' Object' et 'List' est un type générique. – Bobby
@khachik, ce sont deux classes concrètes en C#. –