之前
我們經常需要使用 string 類型定義字符串文本,字符串文本用一對雙引號括起來表示:
var?str?=?"Hello?MyIO";
字符串可包含任何字符文本,但是有些字符需要轉義才能表示,比如雙引號要轉義成\"
:
var?str?=?"{\"K\":\"V\"}";
如果需要將文本多行顯示,則需要插入回車換行,并且回車換行符要轉義成\r\n
:
var?str?=?"{\r\n?\"K\":\"V\"?\r\n}";
為了讓代碼更有可讀性,可以用原義標識符@
定義字符串,這時大部分字符不需要轉義,但是雙引號要轉義成""
:
var?str?=?@"{""K"":""V""
}";
由于輸出時會包含定義中的所有空格,所以在代碼中不能將{}
對齊
如果需要將字符串中的值用變量或表達式代替,可以用$
將字符串文本標識為內插字符串:
var?x?=?1;
var?y?=?2;
var?str?=?@$"
{{""K"":""{x+y}""
}}";
由于{}
是內插表達式的一部分,所以表示為字符的{}
需要轉義成使用兩個大括號{{}}
C# 11
原始字符串文本從 C# 11 開始可用。原始字符串文本可以包含任意文本,而無需轉義。
原始字符串文本用至少三個雙引號括起來:
var?str?=?"""{"K":"V"}""";
當起始雙引號和結束雙引號位于單獨的行上時,開頭雙引號后面的換行符和結束雙引號前面的換行符不包括在最終內容中。可以縮進原始字符串文本以匹配整體代碼格式:
var?str?=?"""{"K":"V"}""";
結束雙引號指定字符串文本最左側的列,前面的空格都會被忽略
當插入表達式時,需要用$$
將字符串文本標識為內插字符串:
var?x?=?1;
var?y?=?2;
var?str?=?$$"""{"K":"{{x?+?y}}"}""";
{{}}
作為內插表達式的一部分,表示為字符的{}
無需轉義
將定義原始字符串文本的代碼反編譯,可以看到,字符串其實還是使用的一對雙引號括起來表示。原始字符串只是 C# 11 ?為我們提供的一個語法糖
添加微信號【MyIO666】,邀你加入技術交流群