.NET bietet einen generischen Listencontainer, dessen Leistung nahezu identisch ist (siehe Frage Leistung von Arrays vs. Listen). Sie unterscheiden sich jedoch in der Initialisierung erheblich.
Arrays lassen sich sehr einfach mit einem Standardwert initialisieren und haben per Definition bereits eine bestimmte Größe:
string[] Ar = new string[10];
So kann man sicher zufällige Elemente zuweisen, sagen wir:
Ar[5]="hello";
mit Liste sind die Dinge schwieriger. Ich kann zwei Möglichkeiten sehen, um dieselbe Initialisierung durchzuführen, von denen Sie keine als elegant bezeichnen würden:
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
oder
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
Was wäre ein sauberer Weg?
BEARBEITEN: Die bisherigen Antworten beziehen sich auf die Kapazität, die etwas anderes ist als das Vorabfüllen einer Liste. Bei einer Liste, die gerade mit einer Kapazität von 10 erstellt wurde, ist dies beispielsweise nicht möglichL[2]="somevalue"
EDIT 2: Die Leute fragen sich, warum ich Listen auf diese Weise verwenden möchte, da dies nicht die Art ist, wie sie verwendet werden sollen. Ich kann zwei Gründe sehen:
Man könnte ziemlich überzeugend argumentieren, dass Listen die Arrays der "nächsten Generation" sind, die Flexibilität ohne Strafe hinzufügen. Daher sollte man sie standardmäßig verwenden. Ich weise darauf hin, dass sie möglicherweise nicht so einfach zu initialisieren sind.
Was ich gerade schreibe, ist eine Basisklasse, die Standardfunktionen als Teil eines größeren Frameworks bietet. In der von mir angebotenen Standardfunktionalität ist die Größe der Liste in Advanced bekannt, weshalb ich ein Array hätte verwenden können. Ich möchte jedoch jeder Basisklasse die Möglichkeit bieten, sie dynamisch zu erweitern, und entscheide mich daher für eine Liste.
List
ist kein Ersatz für Array
. Sie lösen deutlich getrennte Probleme. Wenn Sie eine feste Größe wünschen, möchten Sie eine Array
. Wenn Sie a verwenden List
, machen Sie es falsch.