Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
zřetězení je proces připojení jednoho řetězce na konec jiného řetězce. Propojíte řetězce pomocí operátoru +. Pro řetězcové literály a řetězcové konstanty dochází ke zřetězení v době kompilace; nedojde ke zřetězení za běhu. U řetězcových proměnných dochází ke zřetězení výhradně za běhu programu.
Návod
Pomoc s AI můžete použít ke zřetězení řetězců.
Řetězcové literály
Následující příklad rozdělí dlouhý řetězcový literál na menší řetězce, aby se zlepšila čitelnost ve zdrojovém kódu. Kód poskládá menší řetězce a vytvoří dlouhý řetězcový literál. Části jsou zřetězeny do jednoho řetězce v době kompilace. Bez ohledu na počet zahrnutých řetězců neexistuje žádná ztráta výkonu za běhového času.
// 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.";
Console.WriteLine(text);
operátory + a +=
Ke zřetězení řetězcových proměnných můžete použít operátory + nebo +=, interpolaci řetězců nebo String.Format, String.Concat, String.Join nebo StringBuilder.Append metody. Operátor + je snadno použitelný a umožňuje intuitivní kód. I když v jednom příkazu použijete několik operátorů +, obsah řetězce se zkopíruje jenom jednou. Následující kód ukazuje příklady použití operátorů + a += ke zřetězení řetězců:
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 + ".";
Console.WriteLine(str);
str += " How are you today?";
Console.WriteLine(str);
Interpolace řetězců
V některých výrazech je jednodušší použít interpolaci řetězců pro zřetězení řetězců, jak ukazuje následující kód:
string userName = "<Type your name here>";
string date = DateTime.Today.ToShortDateString();
// Use string interpolation to concatenate strings.
string str = $"Hello {userName}. Today is {date}.";
Console.WriteLine(str);
str = $"{str} How are you today?";
Console.WriteLine(str);
Poznámka
V operacích zřetězení řetězců kompilátor jazyka C# považuje řetězec null za stejný jako prázdný řetězec.
Interpolaci řetězců můžete použít k inicializaci konstantního řetězce, když všechny výrazy používané pro zástupné symboly jsou také konstantní řetězce.
String.Format
Další metodou zřetězení řetězců je String.Format. Tato metoda funguje dobře, když vytváříte řetězec z několika řetězců součástí.
StringBuilder
V jiných případech můžete zkombinovat řetězce ve smyčce, kde může být skutečný počet zdrojových řetězců velký. Třída StringBuilder byla navržena pro tyto scénáře. Následující kód používá Append metodu třídy StringBuilder ke zřetězení řetězců.
// Use StringBuilder for concatenation in tight loops.
var sb = new StringBuilder();
for (int i = 0; i < 20; i++)
{
sb.AppendLine(i.ToString());
}
Console.WriteLine(sb.ToString());
Další informace o důvodech pro výběr zřetězení řetězců nebo o třídě StringBuilder.
String.Concat nebo String.Join
Další možností spojení řetězců z kolekce je použití String.Concat metody. Pokud by oddělovač měl oddělit zdrojové řetězce, použijte String.Join metodu. Následující kód kombinuje pole slov pomocí obou metod:
string[] words = ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."];
var unreadablePhrase = string.Concat(words);
Console.WriteLine(unreadablePhrase);
var readablePhrase = string.Join(" ", words);
Console.WriteLine(readablePhrase);
LINQ a Enumerable.Aggregate
Nakonec můžete použít LINQ a metodu Enumerable.Aggregate ke spojení řetězců z kolekce. Tato metoda kombinuje zdrojové řetězce pomocí výrazu lambda. Lambda výraz slouží k přidávání každého řetězce k existující akumulaci. Následující příklad kombinuje pole slov a přidává mezeru mezi každým slovem v poli:
string[] words = ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."];
var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
Console.WriteLine(phrase);
Tato možnost může způsobit více alokací než jiné metody zřetězení kolekcí, protože pro každou iteraci vytvoří mezikrokový řetězec. Pokud je optimalizace výkonu kritická, zvažte třídu StringBuilder nebo metodu String.Concat či String.Join pro zřetězení kolekce namísto Enumerable.Aggregate.
Použití AI ke zřetězení řetězců
Pomocí nástrojů AI, jako je GitHub Copilot, můžete vygenerovat kód jazyka C# ke zřetězení řetězců. Můžete přizpůsobit výzvu k zadání výstupního formátu, proměnných a metody, která se má použít podle vašich požadavků.
Tady je příklad výzvy pro Copilot Chat:
Generate C# code to use string interpolation to build an output string:
"Hello [name], today's date is [current date]. You have [count] new notifications."
Use variables for: name is "John", date is today's date, and notification count is 3.
Format the date as mm/dd/yyyy.
Show the output.
Než je použijete, přečtěte si návrhy společnosti Copilot.
Další informace najdete v nejčastějších dotazech ke copilotu.