4 Stimmen

Wird die anfängliche Kapazität bei der Verwendung von Sammlungsinitialisierungen abgeleitet?

Wird bei der Verwendung der Auflistungsinitialisierer in C# 3.0 die anfängliche Kapazität der Auflistung aus der Anzahl der Elemente abgeleitet, die zur Initialisierung der Auflistung verwendet werden? Zum Beispiel, ist

List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

gleichbedeutend mit

List<int> digits = new List<int>(10) { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

4voto

Jon Skeet Punkte 1325502

Nein, es ist gleichbedeutend mit:

// Note the () after <int> - we're calling the parameterless constructor
List<int> digits = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Mit anderen Worten: Der C#-Compiler weiß nicht, was der parameterlose Konstruktor tun wird, und es interessiert ihn auch nicht - aber genau das wird er aufrufen. Es liegt an der Sammlung selbst zu entscheiden, was ihre anfängliche Kapazität ist (wenn sie überhaupt ein solches Konzept hat - eine verknüpfte Liste zum Beispiel nicht).

4voto

Samuel Neff Punkte 70231

Nein.

List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

ist gleichbedeutend mit

List<int> temp = new List<int>();
temp.Add(0);
temp.Add(1);    
temp.Add(2);    
temp.Add(3);    
temp.Add(4);    
temp.Add(5);    
temp.Add(6);    
temp.Add(7);    
temp.Add(8);    
temp.Add(9);    
List<int> digits = temp;

Die Anzahl der hinzugefügten Artikel ändert nicht automatisch die ursprüngliche Kapazität. Wenn Sie mehr als 16 Elemente über den Sammlungsinitialisierer hinzufügen, können Sie den Konstruktor und den Initialisierer wie folgt kombinieren:

List<int> digits = new List<int>(32) { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };

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