Sie können die Größe eines vorhandenen Arrays nicht ändern, aber Sie können es verwenden:
Array.Resize(ref arr, newSize);
Dies weist ein neues Array zu, kopiert die Daten aus dem alten Array in das neue Array und aktualisiert die arr
Variable (die in diesem Fall per Referenz übergeben wird). Ist es das, was Sie meinen?
Allerdings ist jede andere Referenzen, die noch auf das alte Array verweisen, werden nicht aktualisiert. Eine bessere Option könnte die Arbeit mit List<T>
- dann müssen Sie die Größe nicht manuell ändern, und Sie haben nicht das Problem veralteter Referenzen. Sie müssen nur Add
/ Remove
usw. Im Allgemeinen werden Sie Arrays nicht sehr oft direkt verwenden. Sie haben ihren Nutzen, aber sie sind nicht der Standardfall.
Zu Ihren Kommentaren;
- Boxen:
List<T>
boxt nicht. Das ist einer der Punkte über Generika; unter der Haube, List<T>
ist ein Wrapper um T[]
, also ein List<int>
hat eine int[]
- kein Boxen. Die Älteren ArrayList
ist ein Wrapper um object[]
, so dass hace Box; natürlich, Boxen ist nicht so schlimm, wie Sie vielleicht annehmen sowieso.
- Funktionsweise von
Array.Resize
; wenn ich mich recht erinnere, findet es die Größe von T
und verwendet dann Buffer.BlockCopy
um den Inhalt auszublenden die tatsächlichen Details sind durch einen internen Aufruf versteckt - aber im Wesentlichen nach der Zuweisung eines neuen Arrays ist es ein Blit (memcpy) der Daten zwischen den beiden Arrays, so sollte es ziemlich schnell sein; beachten Sie, dass für Referenz-Typen dies nur die Referenz kopiert, nicht das Objekt auf dem Heap. Wenn Sie jedoch regelmäßig die Größe ändern, List<T>
wäre in der Regel viel einfacher (und schneller, es sei denn, Sie implementieren im Grunde neu, was List<T>
die freie Kapazität, um die Anzahl der Größenänderungen zu minimieren).
0 Stimmen
Siehe auch: stackoverflow.com/questions/392397/arrays-whats-the-point