C#: 字串插值 (String interpolation) 的格式化
自從 C# 有了 字串插值 這東西之後,我就一直是愛用者。畢竟比起 string.format
這東西可是看起來優雅多了。例如:
var message = $"哈囉,{userName} 您的點數將於 {cutoffTime} 到期。";
簡潔又明瞭,一眼就能理解字串內容。實在是挺方便,後來發現這東西還有一些延伸用法,這邊就稍加紀錄一下:
字串插值中能夠做簡易計算,例如:
var message = $"您輸入的數值為:{a}、{b}。他們相加為:{a + b}";
同時,在字串插值時可以針對內容作格式化,只需要用 :
來區隔,妥善運用可以省下一堆 ToString()
的空間。
例如當我們要將時間格式化的時候,就可以:
var date = new DateTime(2020, 8, 9);
var message = $"您的商品已於 {date:yyyy/MM/dd} 抵達。";
// 您的商品已於 2020/08/09 抵達。
另外,數值當然也可以格式化,不過數值的應用比較複雜,主要是用來定下小數點、百分比等符號的位置。 可以參見 自訂數值格式字串 - Microsoft Docs
var cost = 2100;
var message1 = $"您的商品一共是 {cost:#,###} 元";
// 用 # 可以替數字預留位置
// 您的商品一共是 2,100 元
var message2 = $"您的商品一共是 {cost:#,###.00} 元";
// 也可以用 0 來預留位置,若該數字有值就會顯示該數字,沒有就會自動補 0
// 您的商品一共是 2,100.00 元
而格式化也支援列舉,在同時顯示列舉的意義和值的時候會很有幫助:
// public enum Color { Red = 1, Blue = 2, Green = 3 };
var color = Color.Blue;
$"編號 {color:D} 是 {color:G}".Dump();
// 編號 2 是 Blue
承上部分,由於 :
在字串插值裡已經有特殊意義了,因此想在字串插值中使用三元運算子,必須先用 ( )
括起來,如下:
var message = $"您的包裹 {(isArrival ? "已" : "尚未")} 抵達門市";
對字串插值有興趣的朋友,也可用微軟官方的教學課程來試試呦。
參考資料
其他文章
哈囉,如果你也有 LikeCoin,也覺得我的文章有幫上忙的話,還請不吝給我拍拍手呦,謝謝~ ;)