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; vid körning sker ingen sammanfogning. För strängvariabler sker sammansättning endast under körningstid.
Not
C#-exemplen i den här artikeln körs i Try.NET den interna kodutföraren och lekplatsen. 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);
operatörer för +
och +=
Om du vill sammanfoga strängvariabler kan du använda operatorerna +
eller +=
, stränginterpolering eller metoderna String.Format, String.Concat, String.Join eller StringBuilder.Append. Operatorn +
ä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änginterpolation
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);
Not
I strängsammanfogningsåtgärder behandlar C#-kompilatorn en nullsträng på samma sätt som en tom sträng.
Du kan 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. Följande kod använder metoden Append i klassen StringBuilder 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 skäl 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 metod. Använd String.Join metod om en avgränsare ska avgränsa 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 metoden Enumerable.Aggregate 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 array med ord, där ett blanksteg läggs till mellan varje ord i arrayen.
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 metoden String.Concat
eller String.Join
för att sammanfoga en samling i stället för Enumerable.Aggregate
.