Zřetězení řetězců v jazyce C#

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.

Viz také