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

C#8.0中的模式匹配

 更新時(shí)間:2022年07月05日 10:04:07   作者:天方  
這篇文章介紹了C#8.0中的模式匹配,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

C# 8.0中的模式匹配相對(duì)C# 7.0來說有了進(jìn)一步的增強(qiáng),對(duì)于如下類:

class Point
{
    public int X { get; }
    public int Y { get; }
    public Point(int                x, int     y) => (X, Y) = (x, y);
    public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);
}

首先來看C# 7.0中一個(gè)經(jīng)典的模式匹配示例:

static?string?Display(object?o)
{
????switch?(o)
????{
????????case?Point?p?when?p.X?==?0?&&?p.Y?==?0:
????????????return?"origin";
????????case?Point?p:
????????????return?$"({p.X},?{p.Y})";
????????default:
????????????return?"unknown";
????}
}

在C# 8.0中,它有更加精簡(jiǎn)的寫法。

Switch表達(dá)式

在C# 8.0中,可以利用新的switch方式成模式匹配:

static?string?Display(object?o)?=>?o?switch
{
????Point?p?when?p.X?==?0?&&?p.Y?==?0?=>?"origin",
????Point?p???????????????????????????=>?$"({p.X},?{p.Y})",
????_?????????????????????????????????=>?"unknown"
};

它利用一條switch語句完成了模式匹配,第一樣看上去要簡(jiǎn)潔一些。不過,它還有更多更簡(jiǎn)單的寫法。

Property patterns

可以直接通過在屬性上指定值作為判定條件,

static?string?Display(object?o)?=>?o?switch
{
????Point?{?X:?0,?Y:?0?}?=>?"origin",
????Point?p????????????  =>?$"({p.X},?{p.Y})",
????_??????????????????  =>?"unknown"
};

也可以將屬性值傳遞出來。

static?string?Display(object?o)?=>?o?switch
{
????Point?{?X:?0,?Y:?0?}?????????=>?"origin",
????Point?{?X:?var?x,?Y:?var?y?}?=>?$"({x},?{y})",
????_????????????????????????????=>?"unknown"
};

Positional patterns

利用解構(gòu)函數(shù),可以寫出更加精簡(jiǎn)的表達(dá)式。

static?string?Display(object?o)?=>?o?switch
{
????Point(0,?0)?????????=>?"origin",
????Point(var?x,?var?y)?=>?$"({x},?{y})",
????_???????????????????=>?"unknown"
};

如果沒有類型轉(zhuǎn)換,則可以寫得更加簡(jiǎn)單了:

static?string?Display(Point?o)?=>?o?switch
{
????(0,?0)?????????=>?"origin",
????(var?x,?var?y)?=>?$"({x},?{y})"
};

非空判斷

如果只是判斷空和非空,則有最簡(jiǎn)單的模式:

{?}??=>?o.ToString(),
null?=>?"null"	

Tuple patterns

也支持直接對(duì)ValueTuple進(jìn)行模式匹配,用起來非常靈活。

static?State?ChangeState(State?current,?Transition?transition,?bool?hasKey)?=>
????(current,?transition,?hasKey)?switch
{
????(Opened,?Close,?_)?????=>?Closed,
????(Closed,?Open,??_)?????=>?Opened,
????(Closed,?Lock,?true)???=>?Locked,
????(Locked,?Unlock,?true)?=>?Closed,
????_?=>?throw?new?InvalidOperationException($"Invalid?transition")
};

小結(jié)

C# 8.0的模式匹配有了進(jìn)一步的增強(qiáng),雖然可以又有人要說是語法糖了,但用得好的話可以讓你的代碼邏輯簡(jiǎn)化不少,更加容易理解。

參考文章

Do more with patterns in C# 8.0

到此這篇關(guān)于C#模式匹配的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

赤水市| 武川县| 北京市| 新疆| 屏边| 潜江市| 抚州市| 京山县| 通化市| 聂拉木县| 平度市| 天等县| 南木林县| 五峰| 武鸣县| 镶黄旗| 侯马市| 达尔| 得荣县| 刚察县| 嘉善县| 清水县| 尤溪县| 永修县| 金湖县| 双流县| 湖北省| 巴彦淖尔市| 上犹县| 什邡市| 民县| 静乐县| 邵东县| 临清市| 桐梓县| 揭阳市| 佛山市| 屏山县| 毕节市| 临江市| 宁南县|