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.
Tip
Tento článek je součástí části Základy pro vývojáře, kteří už znají aspoň jeden programovací jazyk a učí se jazyk C#. Pokud s programováním teprve začínáte, začněte nejprve kurzy Začínáme .
Pochází z jiného jazyka? Řetězení v jazyce C# má paralely v + Javě a JavaScriptu. Jazyk C# přidává interpolaci řetězců ($"{x}"), podobně jako literály šablon JavaScriptu a Python f-string, jako preferovaný způsob vytváření řetězců z proměnných. Pro vytváření řetězců ve smyčce nabízí C# StringBuilder, podobně jako Java StringBuilder.
Zřetězení připojí jeden řetězec na konec druhého a vytvoří nový řetězec. C# nabízí několik způsobů spojování řetězců a nejlepší volba závisí na tom, zda spojujete pevně danou sadu hodnot nebo kolekci, anebo řetězec sestavujete postupně ve smyčce.
Zřetězení řetězcových literálů
Když zřetězíte řetězcové literály nebo konstanty pomocí +, kompilátor je sloučí už při kompilaci. Rozdělení dlouhého literálu do několika řádků zlepšuje čitelnost ve zdrojovém kódu bez jakýchkoli režijních nákladů za běhu:
// The compiler joins adjacent string literals at compile time,
// so splitting a long literal across lines has no run-time cost.
string message =
"This is the first sentence of a longer message. " +
"This is the second sentence. " +
"This is the third and final sentence.";
Console.WriteLine(message);
// => This is the first sentence of a longer message. This is the second sentence. This is the third and final sentence.
Použití operátorů + a +=
Pokud chcete zkombinovat řetězcové proměnné, použijte + operátor k vytvoření nového řetězce nebo += k připojení k existujícímu. Operátor + je intuitivní a kompilátor zkopíruje obsah řetězce pouze jednou, i když zřetězíte několik operátorů v jednom výrazu:
string name = "Alex";
string day = "Monday";
// Use + to build a string from variables and literals.
string greeting = "Hello " + name + ". Today is " + day + ".";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.
// Use += to append to an existing string.
greeting += " How are you today?";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday. How are you today?
Note
V zřetězení řetězců jazyk C# zachází s řetězcem null stejným jako s prázdným řetězcem, takže zřetězení null přidá do výsledku nic.
Použití interpolace řetězců
Chcete-li do řetězce vložit vyhodnocované výrazy, upřednostněte interpolaci řetězců před pozičními zástupnými symboly, jako jsou tokeny {0} a {1}, které String.Format přebírá z formátování ve stylu jazyka C. Interpolace umístí každý výraz na místo, kde se zobrazí jeho hodnota, takže výsledný řetězec zůstane čitelný a nemůžete chybně zarovnat argument:
string name = "Alex";
string day = "Monday";
// String interpolation reads better than a chain of + operators.
string greeting = $"Hello {name}. Today is {day}.";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.
Pokud je každý interpolovaný výraz sám konstantním řetězcem, můžete k řetězci přiřadit interpolovaný výsledek const .
Spojit řetězce
Pokud chcete zkombinovat prvky kolekce, použijte String.Concat je ke spojení bez oddělovače nebo String.Join k umístění oddělovače mezi jednotlivé prvky:
string[] words = ["The", "quick", "brown", "fox"];
// Concat joins the sequence with no separator.
string runTogether = string.Concat(words);
Console.WriteLine(runTogether);
// => Thequickbrownfox
// Join places a separator between each element.
string sentence = string.Join(' ', words);
Console.WriteLine(sentence);
// => The quick brown fox
string.Join je správný nástroj vždy, když potřebujete výstup oddělený čárkami, například hodnoty oddělené čárkami nebo slova oddělená mezerami.
Vytvoření řetězce ve smyčce
Každá operace + nebo += vytvoří nový řetězec, protože řetězce jsou neměnné. Když ve smyčce připojíte mnoho částí, toto přidělení se sečte. Třída StringBuilder místo toho sestaví výsledek do jediného bufferu:
// StringBuilder builds a string in place, which suits loops
// that append many pieces.
var builder = new StringBuilder();
for (int i = 1; i <= 3; i++)
{
builder.AppendLine($"Line {i}");
}
Console.Write(builder.ToString());
// => Line 1
// => Line 2
// => Line 3
Po StringBuilder sáhněte, když je počet prvků velký nebo při kompilaci neznámý. U pevné, malé množiny hodnot + je operátor a interpolace řetězců jasnější. Pokyny k tomu, kdy každý přístup funguje nejlépe, najdete v tématu Typy string a StringBuilder typy.