最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# 9.0新特性nint和Pattern matching的使用方法

 更新時間:2020年06月15日 16:23:54   作者:一線碼農(nóng)  
這篇文章主要介紹了c# 9.0新特性nint和Pattern matching的使用方法,文中講解非常細致,幫助你更好的學習c# 9.0,有需求的朋友可以參考下

一:背景

1. 講故事

上一篇跟大家聊到了Target-typed newLambda discard parameters,看博客園和公號里的閱讀量都達到了新高,甚是欣慰,不管大家對新特性是多頭還是空頭,起碼還是對它抱有一種極為關(guān)注的態(tài)度,所以我的這個系列還得跟,那就繼續(xù)開擼吧,今天繼續(xù)帶來兩個新特性,更多新特性列表,請大家關(guān)注:新特性預覽

二:新特性研究

1. Native ints

從字面上看貌似是什么原生類型ints,有點莫名其妙,還是看一看Issues上舉得例子吧:

Summary: nint i = 1; and nuint i2 = 2;

Shipped in preview in 16.7p1.

有點意思,還是第一次看到有nint這么個東西,應該就是C#9新增的關(guān)鍵詞,好奇心爆棚,快來實操一下。

 static void Main(string[] args)
 {
  nint i = 10;
  Console.WriteLine($"i={i}");
 }

從圖中看,可以原樣輸出,然后用ILSpy查查底層IL代碼,發(fā)現(xiàn)連IL代碼都不用看😁😁😁。如下圖:

從圖中看原來 nint 就是 IntPtr 結(jié)構(gòu)體哈,如果你玩過 C# 到 C++ 之間的互操作,我相信你會對Ptr再熟悉不過了,從這個 nint 上看,你不覺得C#團隊對指針操作是前所未有的重視嗎? 前有指針類型IntPtr,后有內(nèi)存段處理集合Span,到現(xiàn)在直接提供關(guān)鍵詞支持,就是盡最大努力讓你在類型安全的前提下使用指針。

這就讓我想起了前些天寫的一篇互操作的文章,現(xiàn)在就可以用nint進行簡化了,來段代碼給大家看一下。

  • 原來的寫法:
     [DllImport("ConsoleApplication1.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
      extern static IntPtr AddPerson(Person person);
    
      static void Main(string[] args)
      {
       var person = new Person() { username = "dotnetfly", password = "123456" };
       var ptr = AddPerson(person);
       var str = Marshal.PtrToStringAnsi(ptr);
      }
  • IntPtr -> nint 的寫法

總的來說這個關(guān)鍵詞不是最重要的,重要的是C#團隊對指針操作抱有前所未有的重視,這是一個非常積極的信號。

2. Pattern matching improvements

模式匹配這個不算是什么新特性了,在本次C#9中也是繼續(xù)得到了完善,可能有很多朋友對模式匹配不是很熟悉,畢竟是C#7才有的新玩法,后面幾乎每一個新版本都在跟蹤完善,我先科普一下吧。

❤ 模式匹配到底解決了什么問題

大家在編碼的過程中,不可能遇不到 if/else 嵌套 if/else 的這種情況,有時候嵌套甚至達到5,6層之多,特別影響代碼可讀性,我就來YY個例子。

現(xiàn)在各個地方都在發(fā)不同面值的消費券,為了實現(xiàn)千人千面,消費券的發(fā)放規(guī)則如下:

性別 年齡 地區(qū) 面值
<20 安徽 2000
<40 上海 4000
剩余 剩余 3000
<20 安徽 2500
<60 安徽 1500

如果用傳統(tǒng)的方式,你肯定要用各種花哨的if/else來實現(xiàn),如下代碼:

  static decimal GetTicket(string sex, int age, string area)
  {
   if (sex == "男")
   {
    if (age < 20 && area == "安徽")
    {
     return 2000;
    }
    else
    {
     if (age < 40 && area == "上海")
     {
      return 4000;
     }
     else
     {
      return 3000;
     }
    }
   }
   else
   {
    if (age < 20 && area == "安徽")
    {
     return 2500;
    }
    if (age < 60 && area == "安徽")
    {
     return 1500;
    }
   }

   return 0;
  }

這種代碼可讀性不是一般的差,就像大強子說的那樣:看著都想打人。。。 問題來了,這代碼還有救嗎??? 當然有了,這就需要用Pattern matching 去簡化,畢竟它就是為了這種問題而生的,修改后的代碼如下:

  static decimal GetTicket_Pattern(string sex, int age, string area)
  {
   return (sex, age, area) switch
   {
    ("男", < 20, "安徽") => 2000,
    ("男", < 40, "上海") => 4000,
    ("男", _, _) => 3000,
    ("女", < 20, "安徽") => 2500,
    ("女", < 60, "安徽") => 1500,
    _ => 0
   };
  }

看到這種化簡后的代碼是不是非常驚訝,這就是 Pattern matching 要幫你解決的場景,接下來看看底層的IL代碼是什么樣子。

從圖中看,這反編譯后的代碼比我手工寫的還要爛,無力吐槽哈,當然 模式匹配 有各種千奇百怪的玩法,絕對讓你瞠目結(jié)舌,更多玩法可參考官方文檔:模式匹配

這個特性最重要的是你一定要明白它的客戶群在哪里?

三: 總結(jié)

總的來說,這兩個特性都是比較實用的,尤其是 Pattern matching 化解了你多少不得不這么寫的爛代碼,頭發(fā)護理就靠它了,快來給它點個贊吧!

好了,先就這樣吧,感謝您的閱讀,希望本篇對你有幫助,謝謝。

以上就是c# 9.0新特性nint和Pattern matching的使用方法的詳細內(nèi)容,更多關(guān)于c# nint和Pattern matching的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c#判斷正確的ip地址格式示例

    c#判斷正確的ip地址格式示例

    這篇文章主要介紹了c#判斷正確的ip地址格式示例,需要的朋友可以參考下
    2014-02-02
  • 講解C#面相對象編程中的類與對象的特性與概念

    講解C#面相對象編程中的類與對象的特性與概念

    這篇文章主要介紹了C#面相對象編程中的類與對象的特性與概念,OOP面向?qū)ο笳Z言相對C語言這樣面相過程的語言來說具有類和對象以及方法這樣的特性,需要的朋友可以參考下
    2016-01-01
  • 調(diào)整C#中數(shù)組大小的方法

    調(diào)整C#中數(shù)組大小的方法

    數(shù)組存儲多個相同類型的一種非常常用的數(shù)據(jù)結(jié)構(gòu),它長度是固定,也就是數(shù)組一旦創(chuàng)建大小就固定了,C# 數(shù)組不支持動態(tài)長度,那在C#中是否有方法可以調(diào)整數(shù)組大小呢?本文將通過示例介紹一種調(diào)整一維數(shù)組大小的方法,需要的朋友可以參考下
    2024-06-06
  • C#校驗時間格式的場景分析

    C#校驗時間格式的場景分析

    本文通過場景分析給大家講解C#里如何簡單的校驗時間格式,本次的場景屬于比較常見的收單API,對第三方的訂單進行簽名驗證,然后持久化到數(shù)據(jù)庫,需要的朋友跟隨小編一起看看吧
    2022-08-08
  • C# 獲取XML文件內(nèi)容的多種方式總結(jié)

    C# 獲取XML文件內(nèi)容的多種方式總結(jié)

    這篇文章主要介紹了C# 獲取XML文件內(nèi)容的多種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C# datatable 不能通過已刪除的行訪問該行的信息處理方法

    C# datatable 不能通過已刪除的行訪問該行的信息處理方法

    采用datatable.Rows[i].Delete()刪除行后再訪問該表時出現(xiàn)出現(xiàn)“不能通過已刪除的行訪問該行的信息”的錯誤
    2012-11-11
  • 淺談C#基礎(chǔ)之類的訪問修飾符

    淺談C#基礎(chǔ)之類的訪問修飾符

    淺談C#基礎(chǔ)之類的訪問修飾符,需要的朋友可以參考一下
    2013-03-03
  • C#讀寫Excel的流程步驟

    C#讀寫Excel的流程步驟

    這篇文章主要介紹了詳解C#讀寫Excel的流程步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或工作有一定的參考學習價值,需要的朋友們下面隨著小編來一起來學習吧
    2023-12-12
  • C#實現(xiàn)封面圖片生成器的示例代碼

    C#實現(xiàn)封面圖片生成器的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)簡單的封面圖片生成器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Unity Shader實現(xiàn)素描效果

    Unity Shader實現(xiàn)素描效果

    這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)素描效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

始兴县| 牡丹江市| 隆化县| 噶尔县| 芜湖县| 丁青县| 乌兰察布市| 年辖:市辖区| 太湖县| 望谟县| 永胜县| 达孜县| 永平县| 茶陵县| 汉寿县| 嘉兴市| 繁峙县| 司法| 霍城县| 晋城| 南木林县| 忻州市| 万山特区| 株洲市| 张家口市| 中西区| 大厂| 紫金县| 淮安市| 卓资县| 兴仁县| 浮山县| 会同县| 清苑县| 铅山县| 高要市| 玉屏| 越西县| 泸定县| 长治县| 寿宁县|