如何串連多個字串 (c # 指南)

「串連」是將一個字串附加至另一個字串結尾的程序。 使用 + 運算子即可串連字串。 若是字串常值和字串常數,會在編譯時間進行串連;在非編譯時間不會發生串連。 若是字串變數,串連只會發生在執行階段。

注意

本文中的 C# 範例會在 Try.NET 內嵌程式碼執行器和測試區執行。 選取 [執行] 按鈕以在互動式視窗中執行範例。 執行程式碼之後,您便可以修改它,並再選取一次 [執行] 來執行修改過的程式碼。 修改過的程式碼會在互動式視窗中執行,或是如果編譯失敗的話,互動式視窗會顯示所有 C# 編譯器錯誤訊息。

字串常值

下列範例會將長字串常值分割成較小的字串,以改善原始程式碼的可讀性。 程式碼會串連較小的字串,以建立長字串常值。 元件在編譯時期會串連成單一字串。 無論涉及的字串數目為何,都不會有執行時間效能成本。

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

++= 運算子

若要串連字號串變數,您可以使用 ++= 運算子、 +String.FormatString.ConcatString.JoinStringBuilder.Append 方法。 + 運算子簡單易用,且容易建立直覺化程式碼。 即使一個陳述式使用數個 + 運算子,字串內容也只會複製一次。 下列程式碼示範使用 ++= 運算子來串連字串的範例:

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

字串插補

在某些運算式中,使用字串內插補點會更容易串連字串,如下列程式碼所示:

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

注意

在字串串連作業中,C# 編譯器會將 null 字串視同空字串。

從 c # 10 開始,當預留位置使用的所有運算式也都是常數位符串時,您可以使用字串插補來初始化常數位串。

String.Format

串連字號串的另一種方法是 String.Format 。 當您從少量的元件字串建立字串時,這個方法就很有用。

StringBuilder

在其他情況下,您可能會在迴圈中合併字串,而您不知道要合併多少來源字串,且實際的來源字串數目可能很大。 StringBuilder 類別專為這種案例而設計。 下列程式碼會使用 StringBuilder 類別的 Append 方法來串連字串。

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

您可以閱讀更多有關 選擇字串串連或 類別的原因。

String.ConcatString.Join

從集合加入字串的另一個選項是使用 String.Concat 方法。 如果來源字串應以分隔符號分隔,請使用 String.Join 方法。 下列程式碼會使用這兩種方法來結合文字陣列:

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

最後,您可以使用 LINQ 方法從集合加入字串。 這個方法使用 Lambda 運算式結合來源字串。 Lambda 運算式會負責將各個字串新增到目前累積的內容。 下列範例會結合單字陣列,並在陣列中的每個單字之間加上空格:

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

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

此選項會造成比其他串連集合的方法更多的配置,因為它會為每個反復專案建立中繼字串。 如果優化效能很重要,請考慮使用 StringBuilder 類別或StringBuilder方法來串連集合,而不 Enumerable.Aggregate 是。

另請參閱