兩年多來,習慣了有 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

Post a comment