使用字串插補來建構格式化的字串
此教學課程將教您如何使用字串插補在單一字串中插入值。 您也會了解如何控制結果字串的文字格式。 您使用瀏覽器撰寫並執行 C# 程式碼,而且可以立即查看結果。
建立插入字串
在互動式視窗中執行下列程式碼。 選取 [進入焦點模式] 按鈕。 接著,在互動視窗中輸入下列程式碼區塊 (以您的名稱取代 <name>
),並選取 [執行]:
var name = "<name>";
Console.WriteLine($"Hello, {name}. It's a pleasure to meet you!");
當您執行程式時,[輸出] 會顯示問候語中包含您名稱的字串。 WriteLine 方法呼叫的字串引數是「插入字串運算式」。 它是一種範本,可讓您從包含內嵌程式碼的字串建構單一字串 (稱為「結果字串」)。 插入字串運算式特別適用於將值插入至字串或將數個字串串連 (聯結在一起)。
上面的範例包含每個插入字串運算式都必須要有的兩個項目:
左引號字元之前開頭為
$
字元的字串常值。$
符號與引號字元之間不能有任何空格。 (如果您想要查看包含空格時會發生什麼情況,請在互動式視窗中於$
字元後面插入空格,然後執行已更新的程式碼。C# 編譯器抱怨「未預期的字元 '$'」)。一或多個「插入運算式」。 插入運算式是以左右大括弧 (
{
和}
) 指出。 您可以放置任何 C# 運算式,以傳回大括號內的值 (包含null
)。
嘗試更多包含一些其他資料類型的字串插補範例。
包含不同的資料類型
在前一個步驟中,您使用字串插補將某個字串插入至另一個字串內部。 不過,每個屬於插入字串運算式的插入運算式都可以是任意資料類型。 請包含插入字串運算式中各種資料類型的值。
在下列範例中,我們先定義具有 Name
、Price
與 perPackage
成員的 tuple。 在互動式視窗中執行下列程式碼:
var item = (Name: "eggplant", Price: 1.99m, perPackage: 3);
var date = DateTime.Now;
Console.WriteLine($"On {date}, the price of {item.Name} was {item.Price} per {item.perPackage} items.");
請注意,插入字串中的插入運算式 item.Price
會解析為結果字串中的文字 "1.99"。 原因是,運算式結果的型別不是字串時,會使用下列方式將結果解析為字串:
如果插入運算式評估為
null
,則會使用空字串 ("",或 String.Empty)。如果插入運算式未評估為
null
,一般會呼叫結果運算式的ToString
方法。
在此範例的輸出中,日期太過精確 (eggplant 價格不會因第二個而變更),而價格值未指出貨幣單位。 在下一個步驟中,您將學習如何控制運算式結果的字串表示格式來修正這些問題。
控制插入運算式的格式
在上一個步驟中,已將兩個格式不佳的字串插入至結果字串。 其中一個是只有日期才適合的日期和時間值。 第二個是未指出其貨幣單位的價格。 這兩個問題都很容易解決。 字串插補可讓您指定「格式字串」,以控制特定類型的格式。 修改前一個範例中的 Console.WriteLine
呼叫,使其包含日期和價格運算式的格式字串,如下行所示:
Console.WriteLine($"On {date:d}, the price of {item.Name} was {item.Price:C2} per {item.perPackage} items");
在插入運算式後面接著冒號 (":") 和格式字串,即可指定格式字串。 "d" 是標準日期和時間格式字串,可呈現簡短日期格式。 "C2" 是標準數值格式字串,可將數字呈現為小數點後面有兩位數的貨幣值。
.NET 程式庫中有多種類型都支援一組預先定義的格式字串。 其中包含所有數值類型以及日期和時間類型。 如需支援格式字串之類型的完整清單,請參閱在 .NET 中格式化類型一文中的格式字串和 .NET 類別庫類型。
嘗試修改範例中的格式字串,以查看它們對日期和時間以及數值格式的影響。 將 {date:d}
中的 "d" 變更為 "t" (顯示簡短時間格式)、"y" (顯示年份和月份) 以及 "yyyy" (將年份顯示為四位數)。 將 {price:C2}
中的 "C2" 變更為 "e" (適用於指數標記法) 和 "F3" (適用於小數點後面有三位數的數值)。
除了控制格式之外,您也可以控制結果字串中所含格式化字串的欄位寬度和對齊方式。 在下一步,您將學習如何執行這項作業。
控制插入運算式的欄位寬度和對齊方式
一般情況下,插入字串運算式的結果格式化為字串時,結果字串中會包含該字串,而且沒有前置或尾端空格。 特別是當您使用一組資料時,可控制欄位寬度和文字對齊方式有助於產生更容易讀取的輸出。 若要查看此結果,請執行下列程式碼:
var inventory = new Dictionary<string, int>()
{
["hammer, ball pein"] = 18,
["hammer, cross pein"] = 5,
["screwdriver, Phillips #2"] = 14
};
Console.WriteLine($"Inventory on {DateTime.Now:d}");
Console.WriteLine(" ");
Console.WriteLine($"|{"Item",-25}|{"Quantity",10}|");
foreach (var item in inventory)
Console.WriteLine($"|{item.Key,-25}|{item.Value,10}|");
項目名稱會靠左對齊,而其數量會靠右對齊。 在插入運算式後面加上逗號 (","),並指定「最小」欄位寬度,即可指定對齊方式。 如果指定的值是正數,則欄位會靠右對齊。 如果它是負數,則欄位會靠左對齊。
嘗試移除 {"Item",-25}
和 {item.Key,-25}
程式碼中的負號,然後重新執行此範例。 目前,項目名稱會靠右對齊。
您可以將對齊規範與格式字串結合為單一插入運算式。 若要這樣做,請先指定對齊方式,而且後面接著冒號和格式字串。 嘗試下列程式碼,以顯示含有所定義欄位寬度的三個格式化字串:
Console.WriteLine($"[{DateTime.Now,-20:d}] Hour [{DateTime.Now,-10:HH}] [{1063.342,15:N2}] feet");
恭喜!
您已完成字串內插補點互動式教學課程。 您可以瀏覽 .NET 網站 \(英文\) 以下載 .NET Core SDK、在您的機器上建立專案,並繼續撰寫程式碼。
如需詳細資訊,請參閱字串內插補點。
在這個區段有遇到問題嗎? 如果有,請提供意見反應,好讓我們可以改善這個區段。