506 Stimmen

ArrayList vs List<> in C# ArrayList vs List<> in C#

Was ist der Unterschied zwischen ArrayList und List<> in C#?

Ist es nur so, dass List<> einen Typ hat, während ArrayList keinen hat?

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 nach List 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/…

4voto

Law Kant Dayal Punkte 95

ArrayList ist die Sammlung verschiedener Datentypen, während List<> die Sammlung eines ähnlichen Datentyps seiner eigenen Abhängigkeiten ist.

3voto

Hassan Rahman Punkte 4337

ArrayList sind nicht typsicher, während List typsicher sind. Einfach :).

3voto

ElasticCode Punkte 6395

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 generische List-Klasse verwenden. Die ArrayList-Klasse ist dafür gedacht, heterogene Objektsammlungen zu halten. Sie bietet jedoch nicht immer die beste Leistung. Stattdessen empfehlen wir folgendes:

1voto

Maxim Kitsenko Punkte 1702

Ich denke, die Unterschiede zwischen ArrayList und List sind:

  1. List, wobei T ein Werttyp ist, ist schneller als ArrayList. Dies liegt daran, dass List das Boxing/Unboxing (wo T ein Werttyp ist) vermeidet.
  2. Viele Quellen sagen - normalerweise wird ArrayList nur zur Abwärtskompatibilität verwendet. (ist kein wirklicher Unterschied, aber ich denke, es ist eine wichtige Anmerkung).
  3. Reflexion ist einfacher mit nicht generischer ArrayList als mit List
  4. 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)
        {
            // ...
        }
    }

-2voto

Deepak Punkte 125

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.
    }
}

0 Stimmen

Was fügt dies über die Antwort hinaus, die Termas vor drei Jahren gegeben hat? Es hat fast den gleichen Text wörtlich, ohne Verknüpfung mit der Quelle, ohne ordnungsgemäße Formatierung usw.

CodeJaeger.com

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.

Powered by:

X