Share via


Meerdere tekenreeksen samenvoegen (C#-handleiding)

Samenvoeging is het proces van het toevoegen 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 coderunner en playground. Selecteer de knop Uitvoeren om een voorbeeld uit te voeren in een interactief venster. Nadat u de code hebt uitgevoerd, kunt u deze wijzigen en de gewijzigde code uitvoeren door Opnieuw uitvoeren te selecteren. 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 letterlijke waarde van de lange tekenreeks te maken. De onderdelen worden samengevoegd tot één tekenreeks tijdens het compileren. Er zijn geen runtime-prestaties, ongeacht het aantal tekenreeksen dat nodig 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);

+ en += operators

Als u tekenreeksvariabelen wilt samenvoegen, kunt u de + operatoren, += tekenreeksinterpolatie of de String.Format, String.ConcatString.Join of StringBuilder.Append methoden gebruiken. 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 en += operators voor het + samenvoegen van tekenreeksen:

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.

Vanaf C# 10 kunt u 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 u een tekenreeks maakt van een klein aantal onderdeeltekenreeksen.

StringBuilder

In andere gevallen combineert u mogelijk tekenreeksen in een lus waarbij u niet weet hoeveel brontekenreeksen u combineert en het werkelijke aantal brontekenreeksen groot kan zijn. De StringBuilder klasse is ontworpen voor deze scenario's. In de volgende code wordt de Append methode van de StringBuilder klasse gebruikt 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());

U kunt meer lezen over de redenen om tekenreekssamenvoeging of de StringBuilder klasse te kiezen.

String.Concat of String.Join

Een andere optie voor het samenvoegen van tekenreeksen uit een verzameling is het gebruik van String.Concat de methode. Gebruik String.Join de methode als een scheidingsteken 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 Enumerable.Aggregate methode gebruiken om tekenreeksen uit een verzameling samen te voegen. Deze methode combineert de brontekenreeksen met behulp van een lambda-expressie. De lambda-expressie werkt om elke tekenreeks toe te voegen aan de bestaande accumulatie. 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 methode String.JoinString.Concat om een verzameling samen te stellen in plaats van .Enumerable.Aggregate

Zie ook