2010-08-02 12 views
11

Wie kann ich eine Arraylist in eine Liste konvertieren/dumpen? Ich benutze Arraylist, weil ich die ASP.NET-Profile-Funktion verwende und es sah wie ein Problem aus, List in Profilen zu speichern.Arraylist zu Liste <t>?

Hinweis: Die andere Option wäre, die Liste in eine eigene Klasse zu verpacken und ArrayList zu beseitigen.

http://www.ipreferjim.com/site/2009/04/storing-generics-in-asp-net-profile-object/

+0

Mögliche Duplikat [In .Net, wie konvertiere Sie eine Arraylist in eine stark typisierte generische Liste ohne eine foreach ?] (http://stackoverflow.com/questions/786268/in-net-how-do-you-convert-an-arraylist-to-a-strongly-type-generic-list-withou) –

Antwort

24

Der einfachste Weg, um eine ArrayList voll von Objekten des Typs zu umwandeln T wäre, diese (vorausgesetzt, Sie .NET 3.5 oder höher verwenden):

List<T> list = arrayList.Cast<T>().ToList(); 

Wenn Sie mit 3.0 oder früher, müssen Sie sich selbst loopen:

+1

In .NET 3.0 oder früher könnte man 'List list = new Liste ((T []) arrayList.ToArray())' verwenden . Dies beruht auf der Kovarianz von Arrays in .NET, ist jedoch weniger effizient, da eine zusätzliche Kopie der Daten erstellt wird. – LBushkin

+0

Wenn die ArrayList eine Mischung von Objekttypen ist, verwenden Sie 'OfType ()' anstelle von 'Cast ()'. (.NET 3.5 oder höher) –

+0

@LBushkin, ich konnte das nicht funktionieren, ohne die Typüberladung von 'ToArray' zu verwenden, um eine' Array'-Basis zurückzugeben. Funktioniert den ganzen Tag mit 'new List ((T []) arrayList.ToArray (typeof (T)))' – Marc

4

Sie können Linq verwenden, wenn Sie .NET 3.5 oder höher verwenden. using System.Linq;

ArrayList arrayList = new ArrayList(); 
arrayList.Add(1); 
arrayList.Add("two"); 
arrayList.Add(3); 

List<int> integers = arrayList.OfType<int>().ToList(); 

Andernfalls werden Sie alle Werte auf eine neue Liste zu kopieren.

+0

danke: D eine Zeile Umwandlung war, was ich suchte –

2
ArrayList a = new ArrayList(); 

object[] array = new object[a.Count]; 

a.CopyTo(array); 

List<object> list = new List<object>(array); 

Andernfalls müssen Sie nur eine Schleife über Ihre ArrayList machen und sie der neuen Liste hinzufügen.

+2

oder verwandelte sich in einen einzigen Liner, wenn er Objekt 'neue Liste (a.ToArray()) wollte;' – Marc

+0

... scheint mir ein wenig lang umständlich . – spender

+0

@Marc: Er könnte Liste verwenden und immer noch ein oneliner durch Verlass auf [Array Kovarianz] (http://msdn.microsoft.com/en-us/library/aa664572 (VS.71% 29.aspx) in) C#: 'neue Liste ((T []) a.ToArray());' – LBushkin

0

Dies funktioniert in Framework < 3.5 zu:

Dim al As New ArrayList() 
al.Add(1) 
al.Add(2) 
al.Add(3) 
Dim newList As New List(Of Int32)(al.ToArray(GetType(Int32))) 

C#

List<int> newList = new List<int>(al.ToArray(typeof(int))); 
Verwandte Themen