Megosztás a következőn keresztül:


Több sztring összefűzésére (C# útmutató)

Az összefűzés az a folyamat, amely során egy sztringet hozzáfűz egy másik sztring végéhez. Sztringeket fűzhet össze az + operátorral. Sztringkonstansok és sztringállandók esetében az összefűzés fordításkor történik; nincs futásidejű összefűzés. Sztringváltozók esetén az összefűzés csak futásidőben történik.

Feljegyzés

A cikkben szereplő C#-példák a Try.NET beágyazott kódfuttatóban és játszótéren futnak. Kattintson a Futtatás gombra egy példa interaktív ablakban való futtatásához. Miután végrehajtotta a kódot, módosíthatja és futtathatja a módosított kódot a Futtatás gombra kattintva. A módosított kód vagy az interaktív ablakban fut, vagy ha a fordítás sikertelen, az interaktív ablakban megjelenik az összes C#-fordító hibaüzenet.

Sztringkonstansok

Az alábbi példa egy hosszú sztringkonstanst kisebb sztringekre osztja fel a forráskód olvashatóságának javítása érdekében. A kód összefűzi a kisebb sztringeket a hosszú sztringkonstans létrehozásához. A részek fordításkor egyetlen sztringbe vannak összefűzve. Az érintett sztringek számától függetlenül nincs futásidejű teljesítményköltség.

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

+ és += operátorok

A sztringváltozók összefűzéséhez használhatja az operátorokat+=, a + sztring interpolációt vagy a String.Format, String.ConcatString.Join vagy StringBuilder.Append metódusokat. Az + operátor könnyen használható, és intuitív kódot biztosít. Még ha több + operátort is használ egy utasításban, a sztring tartalma csak egyszer lesz másolva. Az alábbi kód példákat mutat be a sztringek összefűzésére az és += az + operátorok használatával:

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

Sztring interpolációja

Egyes kifejezésekben egyszerűbb sztringeket összefűzni sztringek interpolációjával, ahogy az alábbi kód is mutatja:

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

Feljegyzés

A sztringösszefűzési műveletekben a C# fordító a null sztringet ugyanúgy kezeli, mint egy üres sztringet.

A C# 10-től kezdve sztringinterpolációval inicializálhat egy állandó sztringet, ha a helyőrzőkhöz használt kifejezések is állandó sztringek.

String.Format

Egy másik módszer a sztringek összefűzésére: String.Format. Ez a módszer akkor működik jól, ha kis számú összetevő-sztringből készít sztringet.

StringBuilder

Más esetekben előfordulhat, hogy sztringeket kombinál egy hurokban, ahol nem tudja, hány forrássztringet kombinál, és a forrássztringek tényleges száma nagy lehet. Az StringBuilder osztályt ezekhez a forgatókönyvekhez tervezték. Az alábbi kód az Append osztály metódusát használja a StringBuilder sztringek összefűzésére.

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

További információ a sztringösszefűzés vagy az StringBuilder osztály kiválasztásának okairól.

String.Concat vagy String.Join

A gyűjtemény sztringjeinek összekapcsolására másik lehetőség a metódus használata String.Concat . Akkor használja String.Join a metódust, ha egy elválasztónak el kell különítenie a forrássztringeket. A következő kód két módszerrel kombinálja a szavak tömbét:

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 és Enumerable.Aggregate

Végül használhatja a LINQ-t és a Enumerable.Aggregate metódust a gyűjtemény sztringjeinek összekapcsolásához. Ez a metódus a forrássztringeket lambda kifejezéssel egyesíti. A lambda kifejezés elvégzi az egyes sztringek hozzáadását a meglévő felhalmozáshoz. Az alábbi példa egy szótömböt egyesít, és szóközt ad hozzá a tömb egyes szavai között:

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

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

Ez a beállítás több foglalást okozhat, mint a gyűjtemények összefűzését szolgáló más metódusok, mivel minden iterációhoz létrehoz egy köztes sztringet. Ha a teljesítmény optimalizálása kritikus fontosságú, fontolja meg a StringBuilder gyűjtemény összefűzésére használt osztályt vagyString.Concatmetódust String.Join ahelyettEnumerable.Aggregate, hogy .

Lásd még