Czy istnieje sposób dołączenia dwóch konstruktorów stringów? A jeśli tak - czy działa lepiej niż dołączanie ciąg do StringBuilder?Jak dołączyć dwa łańcuchy znaków?
Odpowiedz
tak po prostu ....
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
sb.Append(sb1.ToString());
To jest dołączanie ciąg do sb.Myślałem, aby dołączyć do sb, aby uniknąć uszczelniania sb na ciąg –
Można to zrobić,
bool flag = false;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("The value of the flag is ").Append(flag).Append(".");
Źródło MSDN.
prostu jako że:
firstStringBuilder.Append(secondStringBuilder.ToString());
to zrobi to bez alokacji
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]);
}
To jest warte rozważenia, ale widząc jak wiesz "second.Length" wcześniej, powinieneś najpierw wywołać 'sb.EnsureCapacity (sb.Length + second.Length)'. –
wiem, że to trzy lata później, ale .NET 4 StringBuilder
zachowuje się inaczej w każdym razie.
Mimo to nadal wraca do "co chcesz zrobić?" Poszukujesz po prostu najbardziej wydajnego sposobu dołączania dwóch StringBuilders
i kontynuowania tego samego rezultatu? A może spodziewasz się kontynuować pracę z istniejącą buforowaną wartością dołączonego StringBuilder
?
Dla tych pierwszych, i zawsze w .NET 4,
frontStringBuilder.Append(backStringBuilder);
jest najlepszy.
Na tym drugim scenariuszu w .NET 2/3.5,
frontStringBuilder.Append(backStringBuilder.ToString(0, backStringBuilder.Length));
jest najlepszy (i nie będzie bolało wydajność w .NET 4).
Bardzo jasna odpowiedź. Pomyślałem, że warto to dodać. AppendLine() NIE zapewnia takiej samej elastyczności, na wypadek gdyby ktoś się zastanawiał. –
@CharlesRobertoCanato Nie jestem pewien co masz na myśli: '.AppendLine' jest zaimplementowany jako' .Append (string) ', po którym następuje' .Append (NewLine) 'dla obu .NET 2.0/3.5 i 4, co oznacza, że oba powyższe scenariusze są takie same. –
Przepraszam, @MarkHurd Nie byłam wystarczająco jasna: chodzi mi o to, że '.ApppendLine' jest naprawdę zaimplementowana w opisany sposób, akceptuje tylko' String' jako parametr w dowolnej wersji .NET. Tak więc, nawet w .NET 4, nie można po prostu zrobić '.AppendLine (backStringBuilder)' - co miałem na myśli z "brakiem elastyczności". Nie ma problemu, tylko notatkę - to tylko dodatkowe wywołanie metody. –
Nie trzeba dzwonić .ToString(). Powinieneś po prostu dołączyć jeden do drugiego. To wszystko. Będzie lepiej przeciwko bezpośredniemu wywoływaniu .ToString() z następnego powodu:
1) StringBuilder nie ma konstruktora z StringBuilder jako param, ciąg, int/string itp. Nadpisanie StringBuilder .ToString() i jako wynik:
StringBuilder sb1 = new StringBuilder("1");
sb1.Append(new StringBuilder("2"));
Console.WriteLine(sb1);
ten kod wywoła automatycznie zastąpioną wersję .ToString(). Wyjście będzie "12";
2) Jeśli StringBuilder zostanie dodany jako parametr przychodzący do konstruktorów StringBuilder w kolejnych wersjach framework, twój kod będzie jasny i gotowy do poprawnego dołączania bez żadnego refaktoryzacji.
Miłego dnia!
Świetna sugestia i czyste, zrozumiałe kodowanie –
Jeśli StringBuilder jest duża, to zminimalizuje String-przydziały (zwłaszcza jeśli można zapewnić wielokrotnego użytku Char-bufor):
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. Jak połączyć dwa atomy/łańcuchy?
- 2. C# porównując dwa łańcuchy tablicowe
- 3. Jak dołączyć dwa niepowiązane repozytoria?
- 4. Jak połączyć dwa łańcuchy, aby zbudować pełną ścieżkę?
- 5. Jak wkleić łańcuchy znaków (każdy z każdym)?
- 6. Arraylist zawierające liczby całkowite i łańcuchy znaków
- 7. Angular 2 obietnice/obserwowalne dwa łańcuchy wydarzeń?
- 8. Jak dołączyć "do łańcucha znaków
- 9. Jak łączyć łańcuchy C++ i łańcuchy Arduino?
- 10. Zmutowane łańcuchy znaków w języku Python
- 11. Wieloplatformowe łańcuchy znaków (i Unicode) w C++
- 12. Skonsumuj dwa tablice znaków?
- 13. Czy obsługa JavaScript obsługuje łańcuchy znaków?
- 14. Łańcuchy i kodowanie znaków w C++
- 15. Jak przekonwertować numeryczne łańcuchy znaków na listę w Pythonie
- 16. Jak porównać dwa ciągi znaków w scala?
- 17. Dwa różne łańcuchy dziedziczenia bez łamania zasady DRY
- 18. Jak dołączyć do tego samego stołu, dwa razy, w mysql?
- 19. Jak dołączyć dwa obiekty elementów jQuery? .add() nie działa
- 20. Jak dołączyć dwa ciągi do NSPredicate, tj. Imię i nazwisko
- 21. Jak połączyć dwa łańcuchy i użyć wyniku jako nazwy zmiennej w trybie coldfusion?
- 22. Jak połączyć łańcuchy TFS?
- 23. xsl: jak podzielić łańcuchy?
- 24. pandy konwertują łańcuchy znaków do wielu kolumn w ramce danych
- 25. Łańcuchy centrujące z printf()
- 26. Spark import plików Parquet konwertuje łańcuchy znaków do bytearray
- 27. Jak mogę opisać zmienne łańcuchy, gdy łańcuchy są domyślnie niezmienne?
- 28. Lista elementów zastępujących łańcuchy znaków w języku Python
- 29. Czy łańcuchy są zestawiane w Pythonie
- 30. Jak mogę dołączyć do listy w ciągu znaków (zastrzeżenia)?
stringBuilder1.Append (stringBuilder2.ToString()); http://www.dotnetperls.com/stringbuilder-1 – Joe
Myślę, że to pytanie nie zostało nazwane tak, jak powinno być! Zmieniono – Burimi
. Mój zły –