Sammanfoga flera strängar (C#-guide)

Sammanfogning är processen att lägga till en sträng i slutet av en annan sträng. Du sammanfogar strängar med hjälp av operatorn + . För strängliteraler och strängkonstanter sker sammanfogning vid kompileringstid; ingen sammanfogning vid körning sker. För strängvariabler sker sammanfogning endast vid körning.

Kommentar

C#-exemplen i den här artikeln körs i Try.NET infogad kodlöpare och lekplats. Välj knappen Kör för att köra ett exempel i ett interaktivt fönster. När du har kört koden kan du ändra den och köra den ändrade koden genom att välja Kör igen. Den ändrade koden körs antingen i det interaktiva fönstret eller, om kompilering misslyckas, visar det interaktiva fönstret alla felmeddelanden för C#-kompilatorn.

Strängliteraler

I följande exempel delas en lång strängliteral upp i mindre strängar för att förbättra läsbarheten i källkoden. Koden sammanfogar de mindre strängarna för att skapa den långa strängliteralen. Delarna sammanfogas till en enda sträng vid kompileringstillfället. Det finns ingen kostnad för körningsprestanda oavsett antalet strängar som ingår.

// 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);

+ och += operatorer

Om du vill sammanfoga strängvariabler kan du använda + operatorerna eller += operatorerna, stränginterpolationen String.Format eller metoderna , String.ConcatString.Join eller StringBuilder.Append . Operatören + är enkel att använda och ger intuitiv kod. Även om du använder flera + operatorer i en instruktion kopieras stränginnehållet bara en gång. Följande kod visar exempel på hur du använder operatorerna + och += för att sammanfoga strängar:

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);

Stränginterpolering

I vissa uttryck är det enklare att sammanfoga strängar med hjälp av stränginterpolation, som följande kod visar:

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);

Kommentar

I strängsammanfogningsåtgärder behandlar C#-kompilatorn en nullsträng på samma sätt som en tom sträng.

Från och med C# 10 kan du använda stränginterpolation för att initiera en konstant sträng när alla uttryck som används för platshållare också är konstanta strängar.

String.Format

En annan metod för att sammanfoga strängar är String.Format. Den här metoden fungerar bra när du skapar en sträng från ett litet antal komponentsträngar.

StringBuilder

I andra fall kanske du kombinerar strängar i en loop där du inte vet hur många källsträngar du kombinerar, och det faktiska antalet källsträngar kan vara stort. Klassen StringBuilder har utformats för dessa scenarier. I följande kod används Append -metoden för StringBuilder klassen för att sammanfoga strängar.

// 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());

Du kan läsa mer om orsakerna till att välja strängsammanfogning eller StringBuilder klassen.

String.Concat eller String.Join

Ett annat alternativ för att koppla strängar från en samling är att använda String.Concat metoden. Använd String.Join metoden om en avgränsare ska separera källsträngar. Följande kod kombinerar en matris med ord med båda metoderna:

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 och Enumerable.Aggregate

Du kan äntligen använda LINQ och Enumerable.Aggregate metoden för att koppla strängar från en samling. Den här metoden kombinerar källsträngarna med ett lambda-uttryck. Lambda-uttrycket utför arbetet med att lägga till varje sträng i den befintliga ackumuleringen. I följande exempel kombineras en matris med ord som lägger till ett blanksteg mellan varje ord i matrisen:

string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);

Det här alternativet kan orsaka fler allokeringar än andra metoder för att sammanfoga samlingar, eftersom det skapar en mellanliggande sträng för varje iteration. Om det är viktigt att optimera prestanda bör du överväga StringBuilder klassen eller String.Concat metoden eller String.Join för att sammanfoga en samling i stället för Enumerable.Aggregate.

Se även