<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          dotNET 7 嘗鮮(VS 和 C# 11)

          共 2951字,需瀏覽 6分鐘

           ·

          2022-11-10 12:02



          1aebf69fec8a91e0ac268716bd780ebf.webp



          2022 年 11 月 8 日,.NET 7 正式發(fā)布了,從 11 月 8 號(hào) 到 10 號(hào),線上的 .NET Conf 2022 會(huì)議正在舉行,可以通過(guò) https://www.dotnetconf.net/ 了解相關(guān)情況。


          微軟現(xiàn)在節(jié)奏越來(lái)越快,相信很多人還沒在生產(chǎn)上使用 .NET 6 , 7 就發(fā)布了,先來(lái)看看都有什么新特性吧。

          .NET 7 為 C# 11/F# 7 帶來(lái)了更好的性能和新特性,體現(xiàn)在 .NET MAUI,ASP.NET Core/Blazor ,Web API,WinForms,WPF 等等。

          .NET 7 在 Visual Studio 17.4.0 版本中支持,17.4.0 版本是 Visual Studio 2022的第三個(gè)長(zhǎng)期服務(wù)渠道 (LTSC) ,17.4 LTSC 版本將支持到 2024 年 7 月 11 日。如果已經(jīng)安裝了 Visual Studio 2022 ,可以直接更新,也可以通過(guò)下面地址下載安裝:

          https://dotnet.microsoft.com/zh-cn/download

          我個(gè)人比較關(guān)注的是工具和語(yǔ)言。

          更新 Visual Studio

          在幫助中點(diǎn)擊檢查更新就可以啟動(dòng)更新,需要等待更新的下載:

          cc5b1d371c762829401562f52fd774a8.webp

          更新完成后重啟電腦,再打開 Visual Studio ,就可以看到框架選擇中有 .NET 7.0 了。

          32377db31a05fa789d6e5a67dc3e2fc4.webp

          Visual Studio 的改進(jìn)

          選擇文本匹配項(xiàng)高亮顯示

          在「工具->選項(xiàng)->文本編輯器->常規(guī)」界面可以開啟「顯示 selection 匹配項(xiàng)」。

          1961f268b9f9444ec3c1fa72f23c6cfb.webp


          勾選此項(xiàng)后,在編輯器中選擇某個(gè)文本,編輯器其他有選擇文本的地方會(huì)進(jìn)行高亮顯示,滾動(dòng)條中也顯示了標(biāo)記來(lái)指示哪些位置有和選擇文本相同的文本。

          70157a5f26b6b56d8fcc188fa38147bf.webp


          目前,它只適用于長(zhǎng)度小于 200 個(gè)字符的字符串,并且所有字符都在一行上。

          音頻提示

          在「工具->選項(xiàng)->文本編輯器->常規(guī)」界面可以開啟啟用音頻提示,需要重新啟動(dòng) VisualStudio 生效。

          0d6261e86cc1acb31f184527cf82736c.webp


          啟用后,編輯器中某一個(gè)行設(shè)置了斷點(diǎn),或者這一行的代碼有警告或者錯(cuò)誤,光標(biāo)移動(dòng)到這一行時(shí),Visual Studio 會(huì)播放一個(gè)聲音。

          斷點(diǎn)因?yàn)橛懈吡帘尘吧?,有沒有提示音都行,警告和錯(cuò)誤,有時(shí)不太容易看出來(lái),這個(gè)聲音就能起到作用了。

          DataTable 可視化工具

          在調(diào)試時(shí),DataTable 可以直接打開成一個(gè)列表,在這個(gè)列表界面中可以進(jìn)行搜索和導(dǎo)出成 Excel 。

          060d51987cb1f4eafe68b3cc43e9ca0f.webp


          當(dāng)然,Visual Studio 17.4 還有更多的新增特性,可以參考下面地址:

          https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-4/

          C# 11

          原始字符串

          在 C# 中字符串是用雙引號(hào)包含起來(lái)的內(nèi)容,這個(gè)內(nèi)容中可能還會(huì)有各種符號(hào),比如:斜杠、雙引號(hào)、單引號(hào)等等,像 json 、xml 內(nèi)容中就經(jīng)常出現(xiàn)雙引號(hào),之前需要使用轉(zhuǎn)義符來(lái)進(jìn)行處理,而在 C# 11 中可以使用三個(gè)引號(hào)包含字符串內(nèi)容,來(lái)實(shí)現(xiàn)原始字符串,這個(gè)功能真是太喜歡了。

          [HttpGet]
          public?string?Get()
          {
          ?string?sql?=?"""這是一個(gè)原始字符串,名字為"oec2003",加上斜杠/a/b?\c\d?單引號(hào)?''""";

          ?return?sql;
          }

          運(yùn)行結(jié)果:

          55e3230fd86d25d5914d06ea89200744.webp


          自動(dòng)默認(rèn)結(jié)構(gòu)

          在 C# 10 或更早版本中,創(chuàng)建結(jié)構(gòu)時(shí),必須初始化所有字段值。如果有字段沒有初始化,會(huì)有編譯錯(cuò)誤。C# 11 引入了 「自動(dòng)默認(rèn)結(jié)構(gòu)」,它會(huì)初始化字段為默認(rèn)值。

          比如在 C# 10 中,會(huì)出現(xiàn)這樣的錯(cuò)誤:

          6a98d1281e688f2873e3fb184c84faeb.webp


          C# 11 中這段代碼是可以正常執(zhí)行,Age 會(huì)被初始化為 0 。

          必要成員

          當(dāng)一個(gè)類的屬性需要強(qiáng)制在類初始化時(shí)進(jìn)行賦值的時(shí)候,就可以用 required 關(guān)鍵字進(jìn)行修飾:

          public?class?User
          {
          ?public?required?string?UserName?{?get;?init;?}
          ?public?required?int?Age?{?get;?init;?}
          }

          在創(chuàng)建 User 對(duì)象時(shí),如果沒有初始化 UserName 和 Age 就會(huì)出現(xiàn)錯(cuò)誤,如下圖:

          e1a76f1eb4fdc6b6bedfcd01d31a697c.webp

          列表模式

          從 C# 11 開始,數(shù)組或列表可以與元素序列相匹配,元素序列就是一組由中括號(hào)括起來(lái)的元素,匹配使用 is 關(guān)鍵字。

          int[]?testArray?=?{?1,?2,?3,?5,?8?};

          bool?result?=?false;

          //?result?值為?false,?最后一個(gè)數(shù)字沒有匹配
          result?=?testArray?is?[1,?2,?3,?5,?9];

          //?result?值為?false,?元素的位置不一樣
          result?=?testArray?is?[8,?1,?2,?3,?5];

          //?result?值為?false,?長(zhǎng)度沒有匹配
          result?=?testArray?is?[1,?2,?3,?5];

          //?result?值為?true,?元素、長(zhǎng)度、位置都匹配
          result?=?testArray?is?[1,?2,?3,?5,?8];

          列表模式有三種不同的方式:Discard pattern、Range pattern、Var pattern

          Discard pattern:

          比如還是上面例子中的數(shù)組 testArray ,想要知道是否匹配第一個(gè)元素為 1 ,可以這樣來(lái)實(shí)現(xiàn):

          int[]?testArray?=?{?1,?2,?3,?5,?8?};

          bool?result?=?false;

          //?result?值為?true,序列的長(zhǎng)度和數(shù)組匹配,第一個(gè)元素也是?1
          result?=?testArray?is?[1,?_,?_,?_,?_];
          • 序列的長(zhǎng)度要和數(shù)字相同;
          • 序列中不用匹配的元素可以使用 _ 進(jìn)行忽略。

          Range pattern:

          在匹配時(shí),如果序列中元素個(gè)數(shù)是未知的,那么 Range pattern 就可以起作用。使用兩個(gè)點(diǎn)可以用來(lái)指定任意數(shù)量的元素,兩個(gè)點(diǎn)只能在序列中使用一次。

          int[]?testArray?=?{?1,?2,?3,?5,?8?};

          bool?result?=?false;

          //?result?值為?true,..?表示?5之前的,_?表示最后一個(gè)元素,這個(gè)匹配的是倒數(shù)第二個(gè)是?5
          result?=?testArray?is?[..,5,_];

          Var pattern:

          在這個(gè)模式中,可以在 var 關(guān)鍵字后面加變量,匹配上的元素的值會(huì)賦值給變量。

          int[]?testArray?=?{?1,?2,?3,?5,?8?};

          if(testArray?is?[..,var?lastNum])
          {
          ????//?lastNum?的之為?8
          ????Console.WriteLine($"最后一個(gè)元素是:{lastNum}");
          }

          其他的特性,如:對(duì)靜態(tài)成員進(jìn)行抽象等,我覺得可以單獨(dú)寫文章來(lái)介紹。

          最近因?yàn)轫?xiàng)目原因,寫了一些 Java 代碼,相比之下,C# 優(yōu)雅太多了,希望 .NET 能越來(lái)越好,在國(guó)內(nèi)得到更多的認(rèn)可。

          相關(guān)閱讀:

          C#:8.0 & 9.0 常用新特性

          帶你了解C#每個(gè)版本新特性

          瀏覽 66
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产日韩欧美在线观看 | 鸡巴操逼免费视频 | 人人看人人做人人摸 | 国产无码av在线 国产一级内射视频 | 亚州操逼视频 |