在C# 6中實踐模式比對

來源:互聯網
上載者:User

標籤:

模式比對(Pattern Matching)是F#中非常好用的一種語言特性。估計很多人都希望在C#中能用到這樣的特性。

一句話解釋一下模式比對就是:建立一個函數可以接受和處理不同類型的運算式(包括不同參數及類型)。比如你寫了一個名為format的函數,可以處理運算式“x?(1+2)”中的變數、常量、加法和乘法。

Tomas Petricek在他的博文《Pattern matching in action using C# 6》中先抱怨了一下C#在這方面特性的不足,接著還推測了一下C# 6雖然提供了模式比對的能力,但是微軟要藏著捏著不給大家用。

當然,他除了抱怨外,也給大家介紹了在C#和C#中實現模型匹配的方法。

由於C#是類型化的程式設計語言,無法編寫可區分等位型別(discriminated union type)。有趣的是F#其實是把異常看作一種可區分等位型別的,反過來我們也可以用C#的異常來實現模型匹配,即:把運算式作為Exception類型的參數,然後throw這個運算式,然後利用catch來匹配運算式。

基於這種思想,C#就可以實作類別似模式比對的功能來對這個數學運算式“x?(1+2)”進行計算。

如果利用C#的異常過濾器(exception filters)新特性,更容易實現通過模式比對來對數學運算式進行計算。(Tomas說微軟藏著捏著就是指異常過濾器其實就是一種模式比對)

原文地址:http://tomasp.net/blog/2015/csharp-pattern-matching/index.html

在C# 6中實踐模式比對

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.