Jak połączyć wiele ciągów (Przewodnik języka C#)
Concatenation to proces dołączania jednego ciągu na koniec innego ciągu. Ciągi można łączyć przy użyciu operatora +
. W przypadku literałów tekstowych i stałych tekstowych, łączenie odbywa się w czasie kompilacji; nie występuje łączenie w czasie wykonywania. W przypadku zmiennych typu string, łączenie odbywa się tylko w czasie wykonywania.
Notatka
Przykłady języka C# w tym artykule działają w Try.NET wbudowanym modułem uruchamiającym kod i placem zabaw. Wybierz przycisk Uruchom, aby uruchomić przykład w oknie interaktywnym. Po wykonaniu kodu można go zmodyfikować i uruchomić zmodyfikowany kod, wybierając ponownie Uruchom. Zmodyfikowany kod jest uruchamiany w oknie interaktywnym lub, jeśli kompilacja zakończy się niepowodzeniem, w oknie interaktywnym zostaną wyświetlone wszystkie komunikaty o błędach kompilatora języka C#.
Wskazówka
Możesz użyć wsparcia AI, aby połączyć ciągi za pomocą narzędzia GitHub Copilot.
Literały tekstowe
Poniższy przykład dzieli długi literał ciągu na mniejsze ciągi, aby poprawić czytelność kodu źródłowego. Kod łączy mniejsze ciągi, aby utworzyć długi literał ciągu. Części są łączone w jeden ciąg w czasie kompilacji. Nie ma kosztów wydajności w czasie wykonywania niezależnie od liczby zaangażowanych łańcuchów znaków.
// Concatenation of literals is performed at compile time, not run time.
string text = "Historically, the world of data and the world of objects " +
"have not been well integrated. Programmers work in C# or Visual Basic " +
"and also in SQL or XQuery. On the one side are concepts such as classes, " +
"objects, fields, inheritance, and .NET Framework APIs. On the other side " +
"are tables, columns, rows, nodes, and separate languages for dealing with " +
"them. Data types often require translation between the two worlds; there are " +
"different standard functions. Because the object world has no notion of query, a " +
"query can only be represented as a string without compile-time type checking or " +
"IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " +
"objects in memory is often tedious and error-prone.";
System.Console.WriteLine(text);
Operatory +
i +=
Aby połączyć ciągi zmiennych, można użyć operatorów +
lub +=
, interpolacji ciągów znaków lub metod String.Format, String.Concat, String.Join lub StringBuilder.Append. Operator +
jest łatwy w użyciu i umożliwia intuicyjne używanie kodu. Nawet jeśli używasz kilku operatorów +
w jednej instrukcji, zawartość ciągu jest kopiowana tylko raz. Poniższy kod przedstawia przykłady użycia operatorów +
i +=
do łączenia ciągów:
string userName = "<Type your name here>";
string dateString = DateTime.Today.ToShortDateString();
// Use the + and += operators for one-time concatenations.
string str = "Hello " + userName + ". Today is " + dateString + ".";
System.Console.WriteLine(str);
str += " How are you today?";
System.Console.WriteLine(str);
Interpolacja ciągów
W niektórych wyrażeniach łatwiej jest połączyć ciągi przy użyciu interpolacji ciągów, jak pokazano w poniższym kodzie:
string userName = "<Type your name here>";
string date = DateTime.Today.ToShortDateString();
// Use string interpolation to concatenate strings.
string str = $"Hello {userName}. Today is {date}.";
System.Console.WriteLine(str);
str = $"{str} How are you today?";
System.Console.WriteLine(str);
Notatka
W operacjach łączenia ciągów kompilator języka C# traktuje ciąg o wartości null tak samo jak pusty ciąg.
Za pomocą interpolacji ciągów można zainicjować ciąg stały, gdy wszystkie wyrażenia używane dla symboli zastępczych są również ciągami stałymi.
String.Format
Inną metodą łączenia ciągów jest String.Format. Ta metoda działa dobrze podczas tworzenia ciągu z niewielkiej liczby ciągów składników.
StringBuilder
W innych przypadkach można łączyć ciągi w pętli, w której nie wiadomo, ile ciągów źródłowych łączysz, a rzeczywista liczba ciągów źródłowych może być duża. Klasa StringBuilder została zaprojektowana dla tych scenariuszy. Poniższy kod używa metody Append klasy StringBuilder do łączenia ciągów.
// Use StringBuilder for concatenation in tight loops.
var sb = new System.Text.StringBuilder();
for (int i = 0; i < 20; i++)
{
sb.AppendLine(i.ToString());
}
System.Console.WriteLine(sb.ToString());
Więcej informacji na temat powodów, dla których warto wybrać łączenie ciągów, lub klasy StringBuilder
.
String.Concat
lub String.Join
Inną opcją łączenia ciągów z kolekcji jest użycie metody String.Concat. Użyj metody String.Join, jeśli ogranicznik powinien oddzielić ciągi źródłowe. Poniższy kod łączy tablicę wyrazów za pomocą obu metod:
string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };
var unreadablePhrase = string.Concat(words);
System.Console.WriteLine(unreadablePhrase);
var readablePhrase = string.Join(" ", words);
System.Console.WriteLine(readablePhrase);
LINQ i Enumerable.Aggregate
W końcu można użyć LINQ i metody Enumerable.Aggregate do łączenia ciągów z kolekcji. Ta metoda łączy ciągi źródłowe przy użyciu wyrażenia lambda. Wyrażenie lambda służy do dodania każdego ciągu do istniejącej akumulacji. Poniższy przykład łączy tablicę wyrazów, dodając spację między poszczególnymi wyrazami w tablicy:
string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };
var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);
Ta opcja może spowodować więcej alokacji niż inne metody łączenia kolekcji, ponieważ tworzy ciąg pośredni dla każdej iteracji. Jeśli optymalizacja wydajności ma kluczowe znaczenie, rozważ klasę StringBuilder
lub metodę String.Concat
lub String.Join
, aby połączyć kolekcję, zamiast Enumerable.Aggregate
.
Łączenie ciągów za pomocą narzędzia GitHub Copilot
Możesz użyć narzędzia GitHub Copilot w środowisku IDE, aby wygenerować kod języka C#, aby połączyć wiele ciągów. Możesz dostosować monit, aby określić ciągi i sposób ich użycia zgodnie z Twoimi potrzebami.
Poniższy tekst przedstawia przykładowy monit dotyczący czatu copilot:
Generate C# code to use String.Format to build an output string "Hi x, today's date is y. You are z years old." where x is "John", y is today's date and z is the birthdate January 1, 2000. The final string should show date in the full format mm/dd/yyyy. Show output.
Narzędzie GitHub Copilot jest obsługiwane przez sztuczną inteligencję, więc możliwe są niespodzianki i błędy. Aby uzyskać więcej informacji, zobacz Copilot FAQs.
Dowiedz się więcej o GitHub Copilot w programie Visual Studio i GitHub Copilot w programie VS Code.