C# 11 的這個新特性,我願稱之最強! _
前言
在日常開發中我們經常會將JSON、XML、HTML、SQL、Regex
等字串拷貝貼上到我們的程式碼中,而這些字串往往包含很多的引號"
,我們就必須將所有引號逐個新增轉義符\
進行轉義。這個轉義十分麻煩,且容易出錯,而當我們們需要替換這些字串時,重新貼上進來的文字仍需要再次進行轉義,簡直讓人崩潰。
在我的工作中經常會遇到這麼一個場景,對於某核心業務的方法,業務執行前一般會進行日誌輸出引數物件(Json格式),這樣可在業務出現故障時追溯到當時的引數值,有利於事後補償或復現bug等。
假設故障發生了,我從日誌中獲取了這個引數值的內容如下
{
"kpzdbs": "YJ2",
"jqbh": "499098528334",
"fplxdm": "026",
"fpqqlsh": "ZJBX965525",
"kplx": 0,
"tspz": "00"
}
為復現該問題,在控制檯或單元測試中,將該引數定義,並呼叫MyLogic
方法,
可以看到報錯的字串是我直接從日誌中拷貝的json貼上進去的,需要對所有的"
進行轉義,這是很蛋疼的一個問題,有時候可能需要將很多日誌中的物件貼上進來測試,每次貼上完還要進行插入轉義符號
新特性之原始字串
原始字串文字 是字串文字的新格式。 原始字串文字可以包含任意文字,包括空格、新行、嵌入引號和其他特殊字元,而無需轉義序列。 原始字串文字以至少三個雙引號開頭, (""") 個字元。 它以相同數量的雙引號字元結尾。 通常,原始字串文字在單個行上使用三個雙引號來啟動字串,另一行的三個雙引號結束字串。 尾引號和尾引號前面的換行符不包括在最終內容中。
使用案例
我使用這一新特性修改上面場景中的程式碼如下,可以看到,json字串不做任何轉義直接貼上進來即可。
又比如我需要貼上一段html
,如果沒有這新特性,轉義那麼多引號,你可能會瘋吧!!
原始字串使用需要注意的地方
- 以至少三個雙引號 (
"""..."""
) 開頭和結尾,任何數量小於開啟原始字串文字的數量的雙引號都被視為內容。 - 尾引號和尾引號前面的換行符不包括在最終內容中。
- 原始字串文字通常在單個行上使用三個雙引號來啟動字串,另一行的三個雙引號結束字串。
- 可以和
$
(可有多個)內插字串一起使用,字首$
的數量是指示巢狀程式碼表達式所需的花括號的數量。如果原始字串文字以$$
為字首,則將單個大括號視為內容,並且需要兩個大括號來指示巢狀程式碼。就像使用引號一樣,您可以新增更多$
什麼情況下需要超過三個雙引號開頭
當字串的內容中包含至少三個"
一起出現,你的連續出現"
的個數加1(最少三個),就是原始字串
要開頭和結尾使用"
的個數,所以說不是固定三個"
注意:圖中字串前面的|
並不是輸入的字元,是編譯器的對齊提示。
輸出
尾引號和尾引號前面的換行符不包括在最終內容中
如下如,編譯器自動以結尾""""
前為界限顯示出一條豎線,豎線左側的空格不算作內容。
結尾的三個引號不另起一行行不行
將結尾字元放到內容後面,編譯器會提示你將其放到自己的行上
這個可以理解為,在這種情況下可能會引起歧義,編譯器不確定你的原始字串是以下三種的哪一種。
你"""好"""啊
或(前面有空格)
你"""好"""啊
或(換行+前面有空格)
你"""好"""啊
如果下面這樣,則不會歧義,以箭頭指向的豎線為界,左側空格都不算做內容,右側空格均算作內容
和內插字元一起使用
這個比較難理解點,$
符號的數量也是不固定的,根據你需要連續將多少個花括號作為原始字元
你想要輸出的內容沒有括號時,屬於常規用法,沒什麼好說的。
如果你想輸出下文
{張三}
會遇到這個問題的提示
簡單理解就是,你需要將一個大括號視作內容,就需要兩個$
作為字首,你需要將n
個括號是做內容,就需要n + 1
個$
做為字首,同樣內插字串也需要消耗跟$
同樣數量的大括號。
因為你要將一個大括號視為內容,所以需要1 + 1 = 2
個$
,同樣,內插變數也需要跟$
數量一致的括號包裹,所以修改後的程式碼如下。
如果你想輸出的內容是
{{{{張三
需要將四個括號視為內容,n = 4
, $
數量為 4 + 1 = 5
,內插變數也需要5和括號包裹。
總結
當我們將帶有引號的文字貼上至編譯器中需要進行大量的轉義操作,原始字串
特效能很好的解決這個問題,讓我們可以愉快進行貼上這些字串,但當與內插字串使用時,尤其是多個大括號場景還是比較難以理解的,好在編譯器會提示怎麼做,且那種場景都屬於及其不常見。
__EOF__
- 本文作者: Gui.H
- 本文連結: https://www.cnblogs.com/springhgui/p/16172263.html
- 關於博主: 評論和私信會在第一時間回覆。或者直接私信我。
- 版權宣告: 本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協議。轉載請註明出處!
- 聲援博主: 如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。
本文來自部落格園,作者:gui.h,轉載請註明原文連結:https://www.cnblogs.com/springhgui/p/16172263.html
轉 https://www.cnblogs.com/springhgui/p/16172263.html