Ich frage mich, wenn dieser Code ...Enthält ein mit einer Zeichenfolge initialisierter StringBuilder genau (nur) genügend Speicherplatz für diese Zeichenfolge?
StringBuilder sb = new StringBuilder("Please read the following messages.");
... sb
mit einem Puffer initialisiert genau so groß wie die Zeichenfolge an den Konstruktor übergeben. Auf der einen Seite scheint dies das logischste zu sein. Auf der anderen Seite scheint es den Zweck der StringBuilder
-Klasse für eine ihrer häufigsten Anwendungen zu besiegen, nämlich Mutabilität bereitzustellen, um wiederholte Attends effizienter zu machen. (Der erste Aufruf Append
, wenn die Antwort auf meine Frage „Ja“ ist, würde sb
verpflichten, sich zu ändern.)
Dann wieder, ich nehme man dies als analog zu den Konstruktor sehen konnte für List<T>
dass ein dauert IEnumerable<T>
als Parameter. Vielleicht ist die Annahme in diesem Fall, dass Sie nicht planen, auf eine Menge, sondern eher auf manipulieren was schon da ist.
Die einzige wirkliche Forschung, die ich auf das getan habe, war die MSDN documentation on StringBuilder zu überprüfen, die keine Antwort geliefert haben (es sagt der Konstruktor die Instanz initialisiert „die angegebene Zeichenfolge verwendet wird,“ aber zeigt nicht wie die Zeichenfolge wird verwendet).
EDIT: So ist es "Implementierung spezifisch" ... ist das nicht seltsam scheint jemand anderes? Ich meine, der Zweck der StringBuilder
Klasse soll eine Alternative zur Durchführung einer Menge von Operationen auf einem string
, eine Menge von unveränderlichen string
Instanzen auf dem Weg bieten; Daher ist es für Effizienz. Ich habe das Gefühl, dass das Verhalten dieses Konstruktors spezifiziert werden sollte, so dass der Entwickler eine informierte Entscheidung treffen kann, wie er es unabhängig von der Plattform verwenden kann.
Ich meine, es ist ist von Microsoft auf eine bestimmte Weise implementiert; Sie hätten das leicht in die Dokumentation einfügen können (andere Implementierungen müssten folgen). Nur eine persönliche Quelle der Verwirrung ...
Guter Ruf - Ij Das habe ich selbst überprüft und bin zu der gleichen Schlussfolgerung gelangt (indem ich nach der Initialisierung die Eigenschaft 'Capacity' überprüft habe ... irgendwie ist mir das erst aufgefallen, nachdem ich die Frage gepostet hatte). –
... und doch sollten Sie sich nicht darauf verlassen. Wenn Sie sich genügend Gedanken über die erforderliche Kapazität zum Veröffentlichen einer Frage in Stack Overflow machen, sollten Sie nur eine der Überladungen verwenden, in der Sie sie angeben können. Der ganze Zweck von "implementierungsspezifisch" bedeutet, dass es sich in Zukunft ändern kann. Verlassen Sie sich nicht auf undokumentiertes Verhalten. –
@Lasse - Oh, einverstanden. Ich würde nicht befürworten, * sich auf dieses Detail zu verlassen. (Und kämpfen um zu denken, wie Sie sich auf diese Tatsache verlassen könnten) –