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.Join
String.Concat
om een verzameling samen te stellen in plaats van .Enumerable.Aggregate
Zie ook
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor