Was ist der Unterschied zwischen ArrayList
und List<>
in C#?
Ist es nur so, dass List<>
einen Typ hat, während ArrayList
keinen hat?
Was ist der Unterschied zwischen ArrayList
und List<>
in C#?
Ist es nur so, dass List<>
einen Typ hat, während ArrayList
keinen hat?
Wie im .NET Framework Dokumentation erwähnt
Wir empfehlen nicht, dass Sie die
ArrayList
-Klasse für neue Entwicklungen verwenden. Stattdessen empfehlen wir, dass Sie die generischeList
-Klasse verwenden. DieArrayList
-Klasse ist dafür gedacht, heterogene Objektsammlungen zu halten. Sie bietet jedoch nicht immer die beste Leistung. Stattdessen empfehlen wir folgendes:
Für eine heterogene Objektsammlung verwenden Sie den
`List-Typ (in C#) oder den
List(Of Object)-Typ (in Visual Basic).* Für eine homogene Objektsammlung verwenden Sie die
List`-Klasse.Siehe auch Nicht-generische Sammlungen sollten nicht verwendet werden
``
Ich denke, die Unterschiede zwischen ArrayList
und List
sind:
List
, wobei T ein Werttyp ist, ist schneller als ArrayList
. Dies liegt daran, dass List
das Boxing/Unboxing (wo T ein Werttyp ist) vermeidet.ArrayList
nur zur Abwärtskompatibilität verwendet. (ist kein wirklicher Unterschied, aber ich denke, es ist eine wichtige Anmerkung).ArrayList
als mit List
ArrayList
hat die Eigenschaft IsSynchronized
. Daher ist es einfach, synchronisierte ArrayList
zu erstellen und zu verwenden. Ich habe die Eigenschaft IsSynchronized
nicht für List
gefunden. Beachten Sie auch, dass diese Art der Synchronisierung relativ ineffizient ist, msdn):
var arraylist = new ArrayList();
var arrayListSyncronized = ArrayList.Synchronized(arraylist
Console.WriteLine($"synchronisiert {arraylist.IsSynchronized}");
Console.WriteLine($"synchronisiert {arrayListSyncronized.IsSynchronized}");
var list = new List();
var listSyncronized = ArrayList.Synchronized(list);
Console.WriteLine($"synchronisiert {list.IsSynchronized}");//error, no such prop
Console.WriteLine($"synchronisiert {list.IsSynchronized}");//error, no such prop
ArrayList hat die Eigenschaft ArrayList.SyncRoot, die für die Synchronisation verwendet werden kann (msdn). List hat keine SyncRoot-Eigenschaft, sodass Sie in der folgenden Konstruktion ein Objekt verwenden müssen, wenn Sie List verwenden:
ArrayList myCollection = new ArrayList();
lock(myCollection.SyncRoot) // natürlich können Sie ein anderes Objekt für dieses Ziel verwenden
{
foreach (object item in myCollection)
{
// ...
}
}
Die Verwendung von "Liste" kann das Auftreten von Cast-Fehlern verhindern. Es ist sehr nützlich, um einen Laufzeit-Cast-Fehler zu vermeiden.
Beispiel:
Hier (bei Verwendung von ArrayList) können Sie diesen Code kompilieren, aber Sie werden später einen Ausführungsfehler sehen.
// Erstellen einer neuen ArrayList
System.Collections.ArrayList mixedList = new System.Collections.ArrayList();
// Füge einige Zahlen zur Liste hinzu
mixedList.Add(7);
mixedList.Add(21);
// Füge einige Zeichenfolgen zur Liste hinzu
mixedList.Add("Hallo");
mixedList.Add("Das wird ein Problem sein");
System.Collections.ArrayList intList = new System.Collections.ArrayList();
System.Collections.ArrayList strList = new System.Collections.ArrayList();
foreach (object obj in mixedList)
{
if (obj.GetType().Equals(typeof(int)))
{
intList.Add(obj);
}
else if (obj.GetType().Equals(typeof(string)))
{
strList.Add(obj);
}
else
{
// Fehler.
}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
7 Stimmen
Mögliche Duplikate von ArrayList vs List
9 Stimmen
Es ist eine ähnliche Frage, aber ich glaube nicht genau dasselbe. Hier wird allgemein nach
List<>
gefragt, während die andere spezifisch nachList fragt.
0 Stimmen
Ich habe diesen sehr hilfreichen Blog gefunden, es könnte helfen. Ich dachte, ich sollte den Link teilen: fintechexplained.blogspot.co.uk/2017/07/…