欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#11新特性使用案例詳解

 更新時(shí)間:2022年05月14日 14:00:25   作者:gui.h  
這篇文章主要為大家介紹了C#11新特性的使用案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

在日常開發(fā)中我們經(jīng)常會(huì)將JSON、XML、HTML、SQL、Regex等字符串拷貝粘貼到我們的代碼中,而這些字符串往往包含很多的引號(hào)",我們就必須將所有引號(hào)逐個(gè)添加轉(zhuǎn)義符\進(jìn)行轉(zhuǎn)義。這個(gè)轉(zhuǎn)義十分麻煩,且容易出錯(cuò),而當(dāng)我們們需要替換這些字符串時(shí),重新粘貼進(jìn)來(lái)的文本仍需要再次進(jìn)行轉(zhuǎn)義,簡(jiǎn)直讓人崩潰。

在我的工作中經(jīng)常會(huì)遇到這么一個(gè)場(chǎng)景,對(duì)于某核心業(yè)務(wù)的方法,業(yè)務(wù)執(zhí)行前一般會(huì)進(jìn)行日志輸出參數(shù)對(duì)象(Json格式),這樣可在業(yè)務(wù)出現(xiàn)故障時(shí)追溯到當(dāng)時(shí)的參數(shù)值,有利于事后補(bǔ)償或復(fù)現(xiàn)bug等。假設(shè)故障發(fā)生了,我從日志中獲取了這個(gè)參數(shù)值的內(nèi)容如下

{
    "kpzdbs": "YJ2",
    "jqbh": "499098528334",
    "fplxdm": "026",
    "fpqqlsh": "ZJBX965525",
    "kplx": 0,
    "tspz": "00"
}

為復(fù)現(xiàn)該問(wèn)題,在控制臺(tái)或單元測(cè)試中,將該參數(shù)定義,并調(diào)用MyLogic方法,

可以看到報(bào)錯(cuò)的字符串是我直接從日志中拷貝的json粘貼進(jìn)去的,需要對(duì)所有的"進(jìn)行轉(zhuǎn)義,這是很蛋疼的一個(gè)問(wèn)題,有時(shí)候可能需要將很多日志中的對(duì)象粘貼進(jìn)來(lái)測(cè)試,每次粘貼完還要進(jìn)行插入轉(zhuǎn)義符號(hào)

現(xiàn)在我們不需要這樣做了。

新特性之原始字符串

原始字符串文本是字符串文本的新格式。原始字符串文本可以包含任意文本,包括空格、新行、嵌入引號(hào)和其他特殊字符,而無(wú)需轉(zhuǎn)義序列。原始字符串文本以至少三個(gè)雙引號(hào)開頭, (""") 個(gè)字符。它以相同數(shù)量的雙引號(hào)字符結(jié)尾。通常,原始字符串文本在單個(gè)行上使用三個(gè)雙引號(hào)來(lái)啟動(dòng)字符串,另一行的三個(gè)雙引號(hào)結(jié)束字符串。尾引號(hào)和尾引號(hào)前面的換行符不包括在最終內(nèi)容中。

詳細(xì)內(nèi)容參考這里

使用案例

我使用這一新特性修改上面場(chǎng)景中的代碼如下,可以看到,json字符串不做任何轉(zhuǎn)義直接粘貼進(jìn)來(lái)即可。

又比如我需要粘貼一段html,如果沒有這新特性,轉(zhuǎn)義那么多引號(hào),你可能會(huì)瘋吧!!

原始字符串使用需要注意的地方

以至少三個(gè)雙引號(hào) ("""...""") 開頭和結(jié)尾,任何數(shù)量小于打開原始字符串文字的數(shù)量的雙引號(hào)都被視為內(nèi)容。

尾引號(hào)和尾引號(hào)前面的換行符不包括在最終內(nèi)容中。

原始字符串文本通常在單個(gè)行上使用三個(gè)雙引號(hào)來(lái)啟動(dòng)字符串,另一行的三個(gè)雙引號(hào)結(jié)束字符串。

可以和$(可有多個(gè))內(nèi)插字符串一起使用,前綴$的數(shù)量是指示嵌套代碼表達(dá)式所需的花括號(hào)的數(shù)量。如果原始字符串文字以$$為前綴,則將單個(gè)大括號(hào)視為內(nèi)容,并且需要兩個(gè)大括號(hào)來(lái)指示嵌套代碼。就像使用引號(hào)一樣,您可以添加更多$以允許將更多大括號(hào)視為內(nèi)容。

什么情況下需要超過(guò)三個(gè)雙引號(hào)開頭

當(dāng)字符串的內(nèi)容中包含至少三個(gè)"一起出現(xiàn),你的連續(xù)出現(xiàn)"的個(gè)數(shù)加1(最少三個(gè)),就是原始字符串要開頭和結(jié)尾使用"的個(gè)數(shù),所以說(shuō)不是固定三個(gè)"注意:圖中字符串前面的|并不是輸入的字符,是編譯器的對(duì)齊提示。

輸出

尾引號(hào)和尾引號(hào)前面的換行符不包括在最終內(nèi)容中

如下如,編譯器自動(dòng)以結(jié)尾""""前為界限顯示出一條豎線,豎線左側(cè)的空格不算作內(nèi)容。

結(jié)尾的三個(gè)引號(hào)不另起一行行不行

將結(jié)尾字符放到內(nèi)容后面,編譯器會(huì)提示你將其放到自己的行上

這個(gè)可以理解為,在這種情況下可能會(huì)引起歧義,編譯器不確定你的原始字符串是以下三種的哪一種。

如果下面這樣,則不會(huì)歧義,以箭頭指向的豎線為界,左側(cè)空格都不算做內(nèi)容,右側(cè)空格均算作內(nèi)容

如果是全在一行也行,因?yàn)椴粫?huì)產(chǎn)生歧義。

和內(nèi)插字符一起使用

這個(gè)比較難理解點(diǎn),$符號(hào)的數(shù)量也是不固定的,根據(jù)你需要連續(xù)將多少個(gè)花括號(hào)作為原始字符你想要輸出的內(nèi)容沒有括號(hào)時(shí),屬于常規(guī)用法,沒什么好說(shuō)的。

如果你想輸出下文

{張三}

會(huì)遇到這個(gè)問(wèn)題的提示

簡(jiǎn)單理解就是,你需要將一個(gè)大括號(hào)視作內(nèi)容,就需要兩個(gè)$作為前綴,你需要將n個(gè)括號(hào)是做內(nèi)容,就需要n + 1個(gè)$做為前綴,同樣內(nèi)插字符串也需要消耗跟$同樣數(shù)量的大括號(hào)。因?yàn)槟阋獙⒁粋€(gè)大括號(hào)視為內(nèi)容,所以需要1 + 1 = 2個(gè)$,同樣,內(nèi)插變量也需要跟$數(shù)量一致的括號(hào)包裹,所以修改后的代碼如下。

如果你想輸出的內(nèi)容是

{{{{張三

需要將四個(gè)括號(hào)視為內(nèi)容,n = 4,$數(shù)量為4 + 1 = 5,內(nèi)插變量也需要5和括號(hào)包裹。

總結(jié)

當(dāng)我們將帶有引號(hào)的文本粘貼至編譯器中需要進(jìn)行大量的轉(zhuǎn)義操作,原始字符串特性能很好的解決這個(gè)問(wèn)題,讓我們可以愉快進(jìn)行粘貼這些字符串,但當(dāng)與內(nèi)插字符串使用時(shí),尤其是多個(gè)大括號(hào)場(chǎng)景還是比較難以理解的,好在編譯器會(huì)提示怎么做,且那種場(chǎng)景都屬于極其不常見。

以上就是C#11新特性使用案例詳解內(nèi)容,更多關(guān)于C#11新特性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法實(shí)例詳解

    C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法實(shí)例詳解

    這篇文章主要介紹了C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了C#中構(gòu)造函數(shù)與析構(gòu)函數(shù)的原理、定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-06-06
  • C#中的那些警告該如何去除(完全去除C#警告)

    C#中的那些警告該如何去除(完全去除C#警告)

    C#(英文名為 CSharp)是微軟開發(fā)的一種面向?qū)ο蟮木幊陶Z(yǔ)言,下面這篇文章主要給大家介紹了關(guān)于C#中的那些警告該如何去除的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • C#單例類的實(shí)現(xiàn)方法

    C#單例類的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#單例類的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C#?VB.NET?實(shí)現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件

    C#?VB.NET?實(shí)現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件

    Word中可將Office、PDF、txt等文件作為OLE對(duì)象插入到文檔中,雙擊該對(duì)象可直接訪問(wèn)或編輯該文件,除了以上常見的文件格式對(duì)象,也可以插入多媒體文件,如視頻、音頻等。本篇文章介紹了通過(guò)C#實(shí)現(xiàn)在Word中插入多媒體文件。感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • 利用unity代碼C#封裝為dll的步驟分享

    利用unity代碼C#封裝為dll的步驟分享

    這篇文章主要給大家介紹了關(guān)于利用unity代碼C#封裝為dll的相關(guān)資料,文中通過(guò)圖文將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • C# 基礎(chǔ)入門--關(guān)鍵字

    C# 基礎(chǔ)入門--關(guān)鍵字

    本文主要介紹了C# 基礎(chǔ)知識(shí)--關(guān)鍵字的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • c# Winform自定義控件-儀表盤功能

    c# Winform自定義控件-儀表盤功能

    這篇文章主要介紹了c#Winform自定義控件-儀表盤功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • DevExpress獲取節(jié)點(diǎn)下可視區(qū)域子節(jié)點(diǎn)集合的實(shí)現(xiàn)方法

    DevExpress獲取節(jié)點(diǎn)下可視區(qū)域子節(jié)點(diǎn)集合的實(shí)現(xiàn)方法

    這篇文章主要介紹了DevExpress獲取節(jié)點(diǎn)下可視區(qū)域子節(jié)點(diǎn)集合的實(shí)現(xiàn)方法,是C#程序設(shè)計(jì)中較為常見的技巧,需要的朋友可以參考下
    2014-08-08
  • 聊一聊C#接口問(wèn)題 新手速來(lái)圍觀

    聊一聊C#接口問(wèn)題 新手速來(lái)圍觀

    聊一聊C#接口問(wèn)題,新手速來(lái)圍觀,一個(gè)通俗易懂的例子幫助大家更好的理解C#接口問(wèn)題,感興趣的小伙伴們可以參考一下
    2016-08-08
  • WinForm中快捷鍵與組合按鍵的設(shè)置方法

    WinForm中快捷鍵與組合按鍵的設(shè)置方法

    WinForm中快捷鍵與組合按鍵的設(shè)置,第一種方法。。代碼復(fù)雜,操作簡(jiǎn)單的快捷鍵,另外一種簡(jiǎn)單快捷鍵的方法,大家可以參考下
    2013-02-02

最新評(píng)論