C#11新特性使用案例詳解
前言
在日常開發(fā)中我們經(jīng)常會將JSON、XML、HTML、SQL、Regex等字符串拷貝粘貼到我們的代碼中,而這些字符串往往包含很多的引號",我們就必須將所有引號逐個添加轉(zhuǎn)義符\進行轉(zhuǎn)義。這個轉(zhuǎn)義十分麻煩,且容易出錯,而當我們們需要替換這些字符串時,重新粘貼進來的文本仍需要再次進行轉(zhuǎn)義,簡直讓人崩潰。
在我的工作中經(jīng)常會遇到這么一個場景,對于某核心業(yè)務的方法,業(yè)務執(zhí)行前一般會進行日志輸出參數(shù)對象(Json格式),這樣可在業(yè)務出現(xiàn)故障時追溯到當時的參數(shù)值,有利于事后補償或復現(xiàn)bug等。假設(shè)故障發(fā)生了,我從日志中獲取了這個參數(shù)值的內(nèi)容如下
{ "kpzdbs": "YJ2", "jqbh": "499098528334", "fplxdm": "026", "fpqqlsh": "ZJBX965525", "kplx": 0, "tspz": "00" }
為復現(xiàn)該問題,在控制臺或單元測試中,將該參數(shù)定義,并調(diào)用MyLogic方法,
可以看到報錯的字符串是我直接從日志中拷貝的json粘貼進去的,需要對所有的"進行轉(zhuǎn)義,這是很蛋疼的一個問題,有時候可能需要將很多日志中的對象粘貼進來測試,每次粘貼完還要進行插入轉(zhuǎn)義符號
現(xiàn)在我們不需要這樣做了。
新特性之原始字符串
原始字符串文本是字符串文本的新格式。原始字符串文本可以包含任意文本,包括空格、新行、嵌入引號和其他特殊字符,而無需轉(zhuǎn)義序列。原始字符串文本以至少三個雙引號開頭, (""") 個字符。它以相同數(shù)量的雙引號字符結(jié)尾。通常,原始字符串文本在單個行上使用三個雙引號來啟動字符串,另一行的三個雙引號結(jié)束字符串。尾引號和尾引號前面的換行符不包括在最終內(nèi)容中。
使用案例
我使用這一新特性修改上面場景中的代碼如下,可以看到,json字符串不做任何轉(zhuǎn)義直接粘貼進來即可。
又比如我需要粘貼一段html,如果沒有這新特性,轉(zhuǎn)義那么多引號,你可能會瘋吧??!
原始字符串使用需要注意的地方
以至少三個雙引號 ("""...""") 開頭和結(jié)尾,任何數(shù)量小于打開原始字符串文字的數(shù)量的雙引號都被視為內(nèi)容。
尾引號和尾引號前面的換行符不包括在最終內(nèi)容中。
原始字符串文本通常在單個行上使用三個雙引號來啟動字符串,另一行的三個雙引號結(jié)束字符串。
可以和$(可有多個)內(nèi)插字符串一起使用,前綴$的數(shù)量是指示嵌套代碼表達式所需的花括號的數(shù)量。如果原始字符串文字以$$為前綴,則將單個大括號視為內(nèi)容,并且需要兩個大括號來指示嵌套代碼。就像使用引號一樣,您可以添加更多$以允許將更多大括號視為內(nèi)容。
什么情況下需要超過三個雙引號開頭
當字符串的內(nèi)容中包含至少三個"一起出現(xiàn),你的連續(xù)出現(xiàn)"的個數(shù)加1(最少三個),就是原始字符串要開頭和結(jié)尾使用"的個數(shù),所以說不是固定三個"注意:圖中字符串前面的|并不是輸入的字符,是編譯器的對齊提示。
輸出
尾引號和尾引號前面的換行符不包括在最終內(nèi)容中
如下如,編譯器自動以結(jié)尾""""前為界限顯示出一條豎線,豎線左側(cè)的空格不算作內(nèi)容。
結(jié)尾的三個引號不另起一行行不行
將結(jié)尾字符放到內(nèi)容后面,編譯器會提示你將其放到自己的行上
這個可以理解為,在這種情況下可能會引起歧義,編譯器不確定你的原始字符串是以下三種的哪一種。
如果下面這樣,則不會歧義,以箭頭指向的豎線為界,左側(cè)空格都不算做內(nèi)容,右側(cè)空格均算作內(nèi)容
如果是全在一行也行,因為不會產(chǎn)生歧義。
和內(nèi)插字符一起使用
這個比較難理解點,$符號的數(shù)量也是不固定的,根據(jù)你需要連續(xù)將多少個花括號作為原始字符你想要輸出的內(nèi)容沒有括號時,屬于常規(guī)用法,沒什么好說的。
如果你想輸出下文
{張三}
會遇到這個問題的提示
簡單理解就是,你需要將一個大括號視作內(nèi)容,就需要兩個$作為前綴,你需要將n個括號是做內(nèi)容,就需要n + 1個$做為前綴,同樣內(nèi)插字符串也需要消耗跟$同樣數(shù)量的大括號。因為你要將一個大括號視為內(nèi)容,所以需要1 + 1 = 2個$,同樣,內(nèi)插變量也需要跟$數(shù)量一致的括號包裹,所以修改后的代碼如下。
如果你想輸出的內(nèi)容是
{{{{張三
需要將四個括號視為內(nèi)容,n = 4,$數(shù)量為4 + 1 = 5,內(nèi)插變量也需要5和括號包裹。
總結(jié)
當我們將帶有引號的文本粘貼至編譯器中需要進行大量的轉(zhuǎn)義操作,原始字符串特性能很好的解決這個問題,讓我們可以愉快進行粘貼這些字符串,但當與內(nèi)插字符串使用時,尤其是多個大括號場景還是比較難以理解的,好在編譯器會提示怎么做,且那種場景都屬于極其不常見。
以上就是C#11新特性使用案例詳解內(nèi)容,更多關(guān)于C#11新特性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法實例詳解
這篇文章主要介紹了C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法,結(jié)合實例形式詳細分析了C#中構(gòu)造函數(shù)與析構(gòu)函數(shù)的原理、定義、使用方法與相關(guān)注意事項,需要的朋友可以參考下2016-06-06C#?VB.NET?實現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件
Word中可將Office、PDF、txt等文件作為OLE對象插入到文檔中,雙擊該對象可直接訪問或編輯該文件,除了以上常見的文件格式對象,也可以插入多媒體文件,如視頻、音頻等。本篇文章介紹了通過C#實現(xiàn)在Word中插入多媒體文件。感興趣的可以學習一下2021-12-12DevExpress獲取節(jié)點下可視區(qū)域子節(jié)點集合的實現(xiàn)方法
這篇文章主要介紹了DevExpress獲取節(jié)點下可視區(qū)域子節(jié)點集合的實現(xiàn)方法,是C#程序設(shè)計中較為常見的技巧,需要的朋友可以參考下2014-08-08