日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

如何在 C# 8 中使用 模式匹配

發布時間:2023/12/4 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 C# 8 中使用 模式匹配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模式匹配 是在 C# 7 中引入的一個非常????的特性,你可以在任何類型上使用 模式匹配,甚至是自定義類型,而且在 C# 8 中得到了增強,引入了大量的新模式類型,這篇文章就來討論如何在 C# 8 中使用模式匹配。

C# 8 中的表達式模式

在 C# 8 中有三種不同的方式來表達這種模式。

  • 位置模式

  • 屬性模式

  • Tuple模式

接下來看一下這些模式的相關代碼及使用場景。

位置模式

位置模式主要利用類中的 Deconstruct 方法將類中的屬性解構到一些零散的變量中,然后實現這些零散變量的比較,如果有點懵的話,考慮下面的 Rectangle 類。

public?class?Rectangle{public?int?Length?{?get;?set;?}public?int?Breadth?{?get;?set;?}public?Rectangle(int?x,?int?y)?=>?(Length,?Breadth)?=?(x,?y);public?void?Deconstruct(out?int?x,?out?int?y)?=>?(x,?y)?=?(Length,?Breadth);}

接下來看一下如何在 Rectangle 上使用 位置模式。

static?void?Main(string[]?args){Rectangle?rectangle?=?new?Rectangle(10,?10);var?result?=?rectangle?switch{Rectangle(0,?0)?=>?"The?value?of?length?and?breadth?is?zero.",Rectangle(10,?10)?=>?"The?value?of?length?and?breadth?is?same?–?this?represents?a?square.",Rectangle(10,?5)?=>?"The?value?of?length?is?10,?breadth?is?5.",_?=>?"Default."};Console.WriteLine(result);}

如果還是蒙的話繼續看看最終生成的 IL 代碼,一目了然。

private?static?void?Main(string[]?args) {Rectangle?rectangle?=?new?Rectangle(10,?10);if?(1?==?0){}if?(rectangle?==?null){goto?IL_0056;}rectangle.Deconstruct(out?int?x,?out?int?y);string?text;if?(x?!=?0){if?(x?!=?10){goto?IL_0056;}if?(y?!=?5){if?(y?!=?10){goto?IL_0056;}text?=?"The?value?of?length?and?breadth?is?same?–?this?represents?a?square.";}else{text?=?"The?value?of?length?is?10,?breadth?is?5.";}}else{if?(y?!=?0){goto?IL_0056;}text?=?"The?value?of?length?and?breadth?is?zero.";}goto?IL_005e;IL_0056:text?=?"Default.";goto?IL_005e;IL_005e:if?(1?==?0){}string?result?=?text;Console.WriteLine(result); }

C# 8 的 屬性模式

屬性模式常用于實現基于類中屬性的比較,考慮下面的 Employee 類。

public?class?Employee{public?int?Id?{?get;?set;?}public?string?FirstName?{?get;?set;?}public?string?LastName?{?get;?set;?}public?decimal?Salary?{?get;?set;?}public?string?Country?{?get;?set;?}}

下面的代碼片段展示了如何利用 屬性模式 實現 employee 的個人所得稅計算。

public?static?decimal?ComputeIncomeTax(Employee?employee,?decimal?salary)?=>?employee?switch{{?Country:?"Canada"?}?=>?(salary?*?21)?/?100,{?Country:?"UAE"?}?=>?0,{?Country:?"India"?}?=>?(salary?*?30)?/?100,_?=>?0};

接下來看一下如何調用,代碼如下。

static?void?Main(string[]?args){Employee?employee?=?new?Employee(){Id?=?1,FirstName?=?"Michael",LastName?=?"Stevens",Salary?=?5000,Country?=?"Canada"};decimal?incometax?=?ComputeIncomeTax(employee,?employee.Salary);Console.WriteLine("The?income?tax?is?{0}",?incometax);Console.Read();}

C# 8 的 tuple模式

Tuple 模式是另一種模式類型,常用于實現同一時刻對多個 input 值進行測試,下面的代碼片段展示了如何使用 tuple模式。

static?void?Main(string[]?args){static?string?GetLanguageNames(string?team1,?string?team2)?=>?(team1,?team2)?switch{("C++",?"Java")?=>?"C++?and?Java.",("C#",?"Java")?=>?"C#?and?Java.",("C++",?"C#")?=>?"C++?and?C#.",(_,?_)?=>?"Invalid?input"};(string,?string,?string,?string)?programmingLanguages?=?("C++",?"Java",?"C#",?"F#");var?language1?=?programmingLanguages.Item1.ToString();var?language2?=?programmingLanguages.Item3.ToString();Console.WriteLine($"The?languages?selected?are:?{GetLanguageNames(language1,?language2)}");}

C# 8 中對 模式匹配進行了若干種增強,使得代碼寫起來更加易讀,易維護 和 更加高效,也是這么多年程序員翹首以盼的特性之一。

譯文鏈接:https://www.infoworld.com/article/3518431/how-to-use-pattern-matching-in-csharp-80.html

總結

以上是生活随笔為你收集整理的如何在 C# 8 中使用 模式匹配的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。