Mi chiedo se questo codice ...Un StringBuilder inizializzato con una stringa contiene esattamente (solo) spazio sufficiente per quella stringa?
StringBuilder sb = new StringBuilder("Please read the following messages.");
... inizializza sb
con un buffer esattamente grande come la stringa passata al costruttore. Da un lato, questa sembra la cosa più logica. D'altra parte, sembra di tipo di sconfiggere lo scopo della classe StringBuilder
per uno dei suoi usi più comuni, che è quello di fornire la mutevolezza per rendere più efficienti gli allegati ripetuti. (La prima chiamata a Append
, se la risposta alla mia domanda è "sì", richiederebbe sb
per ridimensionare sé.)
Poi di nuovo, suppongo si potrebbe vedere questa come analogo al costruttore per List<T>
che prende un IEnumerable<T>
come parametro. Forse l'ipotesi in questo caso è che non stai pianificando su aggiungendo molto, ma piuttosto su manipolando che cosa c'è già.
L'unica vera ricerca che ho fatto su questo è stato quello di verificare l'MSDN documentation on StringBuilder, che non ha fornito una risposta (si dice il costruttore inizializza l'istanza "utilizzando la stringa specificata," ma non indica come la stringa è usata).
EDIT: Quindi è "implementazione-specifico" ... fa questo non sembra strano per chiunque altro? Voglio dire, lo scopo della classe StringBuilder
è offrire un'alternativa all'esecuzione di molte operazioni su un string
, creando una tonnellata di immutabili string
istanze lungo il percorso; pertanto, è per l'efficienza . Ritengo che il comportamento di questo costruttore debba essere specificato, in modo che lo sviluppatore possa prendere una decisione informata su come utilizzarlo indipendentemente dalla piattaforma.
Voglio dire, è è implementato da Microsoft in un certo modo; potevano facilmente averlo messo nella documentazione (costringendo altre implementazioni a seguirne l'esempio). Solo una fonte personale di perplessità ...
Buon chiamata - I j l'ho controllato io stesso e raggiunto la stessa conclusione (controllando la proprietà 'Capacity' dopo l'inizializzazione ... in qualche modo questo non mi è accaduto fino a dopo aver postato la domanda). –
... eppure non dovresti fare affidamento su questo. Se ti interessa abbastanza della capacità richiesta di pubblicare una domanda su Stack Overflow, dovresti semplicemente usare uno dei sovraccarichi dove puoi specificarlo. L'intero scopo di "implementazione specifica" significa che può cambiare in futuro. Non fare affidamento su comportamenti non documentati. –
@Lasse - Oh, d'accordo. Non vorrei sostenere * basandomi * su questo dettaglio. (E faticando a pensare a come potresti finire per affidarti a questo fatto) –