首頁 後端開發 C#.Net教程 C# 6與VB 12即將加入模式匹配

C# 6與VB 12即將加入模式匹配

Nov 24, 2016 am 11:58 AM

又有一種源自於函數式程式語言中的概念加入了C#和VB的陣營,這就是被稱為模式匹配(Pattern Matching)的特性。初看上去,模式匹配的作用類似一段switch/select語句塊,但它的功能要強大的多。

  請注意:由於VB版本的規格說明現在還沒有完成,因此這些範例主要都是來自於C#中的模式匹配規格說明。

 is或Matches 操作符

  .NET中的模式匹配主要是透過「is/Matches」操作符支援的。這種也讓人不太熟悉的操作符將一個類別分解為多個組成部分。以下這個範例是基於在周二的新聞報告中所提到的Cartesian記錄類http://www.infoq.com/news/2014/08/Record-Class(record class)的基礎上創建的。

public static bool operator is(Cartesian c, out double x, out double y)
    x = c.X;
    y = c.Y;
    return true;
}
登入後複製

這個is操作符不僅限於在它的定義類別中使用,以下這個範例以另一種方式定義了一個操作符,使它能夠分解一個Cartesian對象,讓它能夠匹配一個Polar物件。

public static class Polar {
    public static bool operator is( Cartesian c, out double R, out double Theta)
   {
        R = Math.Sqrt(c.X*c.X + c.Y*c.Y);
        Theta = Math.Atan2(c.Y, c.X);
        return c.X != 0 || c.Y != 0;
   }
}
var c = Cartesian(3, 4);
if (c is Polar(var R, *))
   Console.WriteLine(R);
登入後複製

 型模式

  最簡單的模式是型別模式,它本質上就是嘗試進行型別轉換並同時賦給某個變數。以下是這種模式的範例:

if (expr is Type v)
   { // code using v }
登入後複製

 遞歸模式

  多數模式都是作為遞歸模式的形式出現,意即它們是由較簡單的模式所組成的。來看看這種模式的範例:

var a = new Location(1, 2, 3); //x=1, y=2, z=3
if (a is Location(1, var y, *))
登入後複製

這個遞歸模式包含了一個常數模式,一個var模式和一個通配符模式。

 常數模式

  這個模式可以將一個屬性與一個常數值進行匹配,常數匹配使用object.Equals(left, right)方法來判斷兩者是否匹配。

 Var模式

  Var模式是一定會匹配成功的,該模式對應的變數將會被賦值為呼叫該is操作符時所提供的值,而該變數的型別則是由該表達式所決定的靜態類型。

 通配符模式

  通配符模式本質上來說就是var表達式,不過你不需要關心匹配的結果。

 內部實作

  讓我們繼續討論一下這個location類別的範例,編譯器在編譯階段會進行以下幾個步驟的處理:

建立變數$x、$y和$z

調用Location.is(Location.is(Location.is(Location.is(Location.is)。 a, out $x, out $y, out $z)方法,並確認傳回結果為true

常數模式:檢查object.Equals($x, 1)呼叫的結果

Var模式:將$y賦給y

通配符模式:忽略$z變數

 Switch/Select Case 語句區塊

  Switch語句區塊的功能將擴展,它將能夠使用模式匹配特性。這實際上意味著你可以用以下方式編寫語句:

case null:
case String s
case Location(1, var y, *):
登入後複製

限制

  在目前的规格草稿中,还没有对于范围检查的支持。这意味着你不能编写类似于“a is Location( > 0, 1 to 5, <= 10)”这样的代码。此外目前也不支持在一个列表或迭代器中进行元素匹配。


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
C#.NET:探索核心概念和編程基礎知識 C#.NET:探索核心概念和編程基礎知識 Apr 10, 2025 am 09:32 AM

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

c#.net的持續相關性:查看當前用法 c#.net的持續相關性:查看當前用法 Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

從網絡到桌面:C#.NET的多功能性 從網絡到桌面:C#.NET的多功能性 Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#作為多功能.NET語言:應用程序和示例 C#作為多功能.NET語言:應用程序和示例 Apr 26, 2025 am 12:26 AM

C#在企業級應用、遊戲開發、移動應用和Web開發中均有廣泛應用。 1)在企業級應用中,C#常用於ASP.NETCore開發WebAPI。 2)在遊戲開發中,C#與Unity引擎結合,實現角色控制等功能。 3)C#支持多態性和異步編程,提高代碼靈活性和應用性能。

c#.net適合您嗎?評估其適用性 c#.net適合您嗎?評估其適用性 Apr 13, 2025 am 12:03 AM

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

.NET中的C#代碼:探索編程過程 .NET中的C#代碼:探索編程過程 Apr 12, 2025 am 12:02 AM

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

C#.NET與未來:適應新技術 C#.NET與未來:適應新技術 Apr 14, 2025 am 12:06 AM

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

將C#.NET應用程序部署到Azure/AWS:逐步指南 將C#.NET應用程序部署到Azure/AWS:逐步指南 Apr 23, 2025 am 12:06 AM

如何將C#.NET應用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。 1.在Azure上,使用AzureAppService和AzurePipelines自動化部署。 2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda實現部署和無服務器計算。

See all articles