C'è un modo per aggiungere due builder di stringhe? E se sì - funziona meglio di aggiungere una stringa a un StringBuilder?Come aggiungere due stringBuilder?
risposta
Proprio così ....
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
sb.Append(sb1.ToString());
Questo è l'accodamento di una stringa a uno sb.Ho pensato di aggiungere a sb per evitare di sigillare sb alla stringa –
Si potrebbe fare che,
bool flag = false;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("The value of the flag is ").Append(flag).Append(".");
Fonte MSDN.
semplicemente come che:
firstStringBuilder.Append(secondStringBuilder.ToString());
Questo lo farà senza allocazioni
StringBuilder sb = new StringBuilder("aaaa");
StringBuilder second = new StringBuilder("bbbbb");
sb.EnsureCapacity(sb.Length + second.Length);
for (int i = 0; i < second.Length; i++)
{
sb.Append(second[i]);
}
Questo vale la pena prendere in considerazione, ma visto che conosci 'second.Length' in anticipo, dovresti prima chiamare' sb.EnsureCapacity (sb.Length + second.Length) '. –
So che questo è di tre anni più tardi, ma il .NET 4 StringBuilder
si comporta in modo diverso in ogni caso.
Tuttavia, torna ancora a "cosa vuoi fare?" Stai cercando semplicemente il modo più performante di aggiungere due StringBuilders
e continuare con solo quest'ultimo risultato? O ti aspetti di continuare a lavorare con il valore di buffer esistente del StringBuilder
aggiunto?
Per il primo, e sempre in .NET 4,
frontStringBuilder.Append(backStringBuilder);
è meglio.
Per quest'ultimo scenario in NET 2/3.5,
frontStringBuilder.Append(backStringBuilder.ToString(0, backStringBuilder.Length));
è meglio (e non farà male le prestazioni in .NET 4).
Risposta molto chiara. Ho pensato che valesse la pena aggiungere che. AppendLine() NON fornisce la stessa flessibilità, nel caso in cui qualcuno si chieda. –
@CharlesRobertoCanato Non sono sicuro di cosa intendi: '.AppendLine' è implementato come' .Append (string) 'seguito da' .Append (NewLine) 'per entrambi .NET 2.0/3.5 e 4, il che significa che entrambi gli scenari sopra sono gli stessi. –
Mi dispiace @MarkHurd I non era abbastanza chiaro: volevo dire che, sebbene '.ApppendLine' sia realmente implementato come descritto, accetta solo' String' come parametro in qualsiasi versione .NET. Quindi, anche in .NET 4, non si può semplicemente fare un '.AppendLine (backStringBuilder)' - cosa volevo dire con "mancanza di flessibilità". Non è un problema, solo una nota: è solo una chiamata al metodo in più, comunque. –
Non è necessario chiamare .ToString(). Dovresti semplicemente aggiungerne uno a un altro. È tutto. Chiama per la chiamata diretta .ToString() per il motivo successivo:
1) StringBuilder non ha costruttore con StringBuilder come parametro, stringa, int/stringa ecc. StringBuilder sovrascrive .ToString() e di conseguenza:
StringBuilder sb1 = new StringBuilder("1");
sb1.Append(new StringBuilder("2"));
Console.WriteLine(sb1);
tale codice richiamerà automaticamente la versione sovrascritta di .ToString(). L'uscita sarà "12";
2) Se StringBuilder verrà aggiunto come parametro in ingresso al costruttore StringBuilder nelle prossime versioni del framework, il codice sarà chiaro e pronto per l'aggiunta corretta senza alcun refactoring.
Buona giornata!
Ottimo suggerimento e codice pulito e comprensibile –
Se lo StringBuilder è grande, allora questo sarà ridurre al minimo stringa-allocazioni (soprattutto se è possibile fornire un char-buffer riutilizzabile):
public static void CopyTo(this StringBuilder source, StringBuilder dest)
{
char[] buffer = new char[Math.Min(source.Length, 1024)];
CopyTo(source, dest, buffer);
}
public static void CopyTo(this StringBuilder source, StringBuilder dest, char[] buffer)
{
dest.EnsureCapacity(dest.Length + source.Length);
for (int i = 0; i < source.Length; i += buffer.Length)
{
int charCount = Math.Min(source.Length - i, buffer.Length);
source.CopyTo(i, buffer, 0, charCount);
dest.Append(buffer, 0, charCount);
}
}
- 1. Come aggiungere due set
- 2. Come aggiungere due java.lang.Numbers?
- 3. Come clonare() StringBuilder
- 4. StringBuilder aggiunge null come "null"
- 5. LINQ da aggiungere a uno StringBuilder da una stringa []
- 6. StringBuilder o + =
- 7. StringBuilder append vs +
- 8. capacità StringBuilder()
- 9. Quando usare StringBuilder?
- 10. Aggiungi spazio bianco a stringbuilder?
- 11. Come posso aggiungere due UIBarButtonItems a UINavigationItem?
- 12. Come aggiungere due stream in Java 8?
- 13. come aggiungere un elemento tra due elementi
- 14. Newline character in stringbuilder
- 15. StringBuilder Vs StringWriter/StringReader
- 16. Crea StringBuilder dal byte []
- 17. StringBuilder vs XmlTextWriter
- 18. StringBuilder modificato da più thread
- 19. Perché StringBuilder non stampa?
- 20. interessante OutOfMemoryException con StringBuilder
- 21. Stringbuilder in CIL (MSIL)
- 22. StringBuilder per PHP
- 23. StringBuilder inizializzazione in Java
- 24. Groovy StringBuilder letterale/StringBuffer
- 25. Stream StringBuilder su file
- 26. Due geom_points aggiungere una legenda
- 27. Come mettere spazi in uno StringBuilder
- 28. Come cambia la capacità di StringBuilder?
- 29. Come tagliare la stringa di StringBuilder?
- 30. Come recuperare un conteggio righe StringBuilder?
stringBuilder1.Append (stringBuilder2.ToString()); http://www.dotnetperls.com/stringbuilder-1 – Joe
Penso che questa domanda non sia nominata come dovrebbe essere! – Burimi
modificato. Il mio male –