$
特殊字元會將字串常值識別為「字串內插補點」。
插入字串是可能包含「插入運算式」的字串常值。將插入字串解析為結果字串時,會將具有插入運算式的項目取代為運算式結果的字串表示。
若要將字串常值識別為插入字串,請在其前面加上 $
符號。 字串常值開頭的 $
與 "
之間不能有空白字元,這樣做會導致編譯時期錯誤。
描述的有點複雜,但實際上卻很容易上手,如下
1 | var date = DateTime.Now; |
以上兩句結果是一樣的,因為 $
是一個語法糖(syntactic sugar),會透過編譯器轉換成帶有參數的 string.Format()
方法。
用法
具有插值運算式的項目結構如下所示:
{<interpolatedExpression>[,<alignment>][:<formatString>]}
若要在插入字串所產生的文字中包含大括號 {
或 }
,請使用兩個大括號 { {
或 } }
來逸出大括號。
interpolatedExpression:產生要格式化之結果的運算式。 null
結果的字串表示是 String.Empty
。
alignment:常數的運算式,其值定義插值運算式結果的字串表示的字元數下限。 如果是正數,則字串表示是靠右對齊;如果是負數,它是靠左對齊。
formatString:運算式結果的類型所支援的格式字串。
如下
1 | Console.WriteLine($"|{"Left",-7}|{"Right",7}|"); |
也可以在插入運算式中使用任何語法正確的表達式。如下
1 | int a = 2; |
而三元運算子 (?:
) 則需要括號括住。如下
1 | int a = 2; |
總結
雖然 $
與 string.Format()
結果一樣,但是在撰寫時的可讀性卻有很大的差異,當引數一多就能想像差別了,string.Format()
需要到引數裡找變數名稱,而 $
則是在字串裡面查找。如下
1 | string str1 = "1"; |
$
雖然好用,但要注意的是在 C# 6 和之後更新的版本中才能使用這項功能。
參考資料
$ - 字串內插補點 (C# 參考)
Back to Basics: String Interpolation in C# - Rick Strahl’s Web Log