C# 也可以用 """ 內嵌多行字串
0 |
兩年多來,習慣了有 Github Copilot 幫忙寫程式,已回不去以前的全手工寫 Code 日子。
這有點像都是在遊山玩水,但以前是自己查地圖騎自行車,現在則是騎機車開導航,如果最終目標是把握時間多跑些地方開眼界,完全沒理由花時間燒大腿爬坡過山頭啊~ (當然,如果志在健身或成為選手,另當別論)
而用 AI 幫忙寫 Code,除了速度快,還常常會學到新東西。程式師即使資深,解決問題用來用去多半就慣用的哪幾招,三板斧再加點隨機應變便夠用了。而 AI 飽讀詩書,博覽天下億萬行程式,多的是你沒看過,但別人舞得虎虎生風的好用招式。因此我常常在 AI 產生的程式碼中發現驚喜,不時學到新東西。(Copilot 應該覺得我是土包子吧?)
今天介紹我 Lag 兩年才學到的 C# 11 好用功能 - 原始字串常值(Raw String Literal)。
在此之前,要在 C# 程式碼夾帶多行字串,我們可以在 "
符號前加上 @
標示為逐字文字(Verbatim Text),例如:
var multiLines = @"
Line 1
Line 2
Line 3";
var escapeSample = @"
Escape symbol "" in verbatim text
";
但 @"..."
寫法有兩個小缺點,一是遇到 "
要改成 ""
,在寫 XML/HTML/JSON 時會遇到一堆 "
要改,很煩;二則是為了排版好看,我們常會在 @"
後先換行再寫內容,最後換行再寫 ";
結束,但如此字串起始會多出換行符號 。(0x0D 0x0A,如下圖)
(這裡用 Ployglot Notebook 展示,測語法蠻方便)
相較之下,C++ 的 Raw String Literal R"...."
、PowerShell 的 Here String @" ... "@
與 Python 的 Triple Quotes """..."""
好用多了。
於是,在 C# 11 時便向 Python 致敬,開始支援 Raw String Literal,像 Python 一樣用至少三個雙引號包夾多行文字,而跟 @" ... "
的最大區別是 - 遇到 "
不必再改成 ""
,如此要內嵌 JSON 就好寫多了。
var json = """
{
"Name": "Jeffrey",
"Score": 32767
}
""";
那如果文字中出現 """
,要怎麼避開?簡單,頭尾的 """
改成四個雙引號就行了。
而前面說到,為了排版換行開始寫內容[1],或縮排造成的空白[2]都不會被當成字串內容(忽略部分以結尾 """
起始位置為準)。
很方便吧,如果你已經在寫 .NET 7+,別錯過這個好功能。
This post highlights a useful feature in C# 11, Raw String Literals, which simplifies embedding multi-line strings and JSON without escape characters.
Comments
Be the first to post a comment