Delen via


Meerdere tekenreeksen samenvoegen (C#-handleiding)

Concatenatie is het proces van het aan elkaar koppelen van een tekenreeks aan het einde van een andere tekenreeks. U voegt tekenreeksen samen met behulp van de operator +. Voor letterlijke tekenreeksen en tekenreeksconstanten vindt samenvoeging plaats tijdens het compileren; er geen runtime-samenvoeging plaatsvindt. Voor tekenreeksvariabelen vindt samenvoeging alleen plaats tijdens runtime.

Notitie

De C#-voorbeelden in dit artikel worden uitgevoerd in de Try.NET inline code-runner en speelomgeving. Selecteer de knop uitvoeren om een voorbeeld uit te voeren in een interactief venster. Zodra u de code hebt uitgevoerd, kunt u deze wijzigen en de gewijzigde code uitvoeren door opnieuw uit te voeren. De gewijzigde code wordt uitgevoerd in het interactieve venster of, als de compilatie mislukt, worden alle C#-compilerfoutberichten weergegeven.

Letterlijke tekenreeksen

In het volgende voorbeeld wordt een lange letterlijke tekenreeks gesplitst in kleinere tekenreeksen om de leesbaarheid in de broncode te verbeteren. De code voegt de kleinere tekenreeksen samen om de lange tekenreeks te maken. De onderdelen worden samengevoegd tot één tekenreeks tijdens het compileren. Er zijn geen prestatiekosten tijdens de uitvoeringstijd, ongeacht het aantal tekenreeksen dat betrokken is.

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

operators voor + en +=

Als u tekenreeksvariabelen wilt samenvoegen, kunt u de operatoren + of += gebruiken, tekenreeksinterpolatie of de String.Format, String.Concat, String.Join of StringBuilder.Append methoden. De operator + is eenvoudig te gebruiken en maakt voor intuïtieve code. Zelfs als u meerdere + operators in één instructie gebruikt, wordt de tekenreeksinhoud slechts één keer gekopieerd. De volgende code toont voorbeelden van het gebruik van de operators + en += om tekenreeksen samen te voegen:

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

Tekenreeksinterpolatie

In sommige expressies is het eenvoudiger om tekenreeksen samen te voegen met behulp van tekenreeksinterpolatie, zoals in de volgende code wordt weergegeven:

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

Notitie

In samenvoegingsbewerkingen voor tekenreeksen behandelt de C#-compiler een null-tekenreeks die hetzelfde is als een lege tekenreeks.

U kunt tekenreeksinterpolatie gebruiken om een constante tekenreeks te initialiseren wanneer alle expressies die worden gebruikt voor tijdelijke aanduidingen ook constante tekenreeksen zijn.

String.Format

Een andere methode voor het samenvoegen van tekenreeksen is String.Format. Deze methode werkt goed wanneer je een tekenreeks maakt van een klein aantal componenttekenreeksen.

StringBuilder

In andere gevallen bent u mogelijk bezig met het combineren van tekenreeksen in een lus waarbij u niet weet hoeveel brontekenreeksen u combineert, en het werkelijke aantal brontekenreeksen kan groot zijn. De StringBuilder-klasse is ontworpen voor deze scenario's. De volgende code maakt gebruik van de Append methode van de StringBuilder-klasse om tekenreeksen samen te voegen.

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

Meer informatie over de redenen om tekenreekssamenvoeging of de StringBuilder klassete kiezen.

String.Concat of String.Join

Een andere optie voor het samenvoegen van tekenreeksen uit een verzameling is het gebruik van String.Concat methode. Gebruik de String.Join-methode als een scheidingsteken de brontekenreeksen moet scheiden. De volgende code combineert een matrix met woorden met behulp van beide methoden:

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

Ten slotte kunt u LINQ- en de methode Enumerable.Aggregate gebruiken om tekenreeksen uit een verzameling samen te voegen. Deze methode combineert de brontekenreeksen met behulp van een lambda-expressie. De lambda-expressie voegt elke tekenreeks toe aan de bestaande verzameling. In het volgende voorbeeld wordt een matrix met woorden gecombineerd, waarbij een spatie wordt toegevoegd tussen elk woord in de matrix:

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

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

Deze optie kan meer toewijzingen veroorzaken dan andere methoden voor het samenvoegen van verzamelingen, omdat er voor elke iteratie een tussenliggende tekenreeks wordt gemaakt. Als het optimaliseren van de prestaties essentieel is, moet u rekening houden met de StringBuilder klasse of de String.Concat of String.Join methode om een verzameling samen te stellen in plaats van Enumerable.Aggregate.

Zie ook