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

C#9新特性之增強的模式匹配

 更新時間:2021年01月04日 09:30:30   作者:WeihanLi  
這篇文章主要介紹了C#9新特性之增強的模式匹配,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧

Intro

C# 9 中進一步增強了模式匹配的用法,使得模式匹配更為強大,我們一起來了解一下吧

Sample

C# 9 中增強了模式匹配的用法,增加了 and / or / not 操作符,而且可以直接判斷屬性,來看一下下面的這個示例:

var person = new Person();

// or
// string.IsNullOrEmpty(person.Description)
if (person.Description is null or { Length: 0 })
{
  Console.WriteLine($"{nameof(person.Description)} is IsNullOrEmpty");
}

// and
// !string.IsNullOrEmpty(person.Name)
if (person.Name is not null and { Length: > 0 })
{
  if (person.Name[0] is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.')
  {
  }
}

// not
if (person.Name is not null)
{
}

這里的代碼使用 DnSpy 反編譯之后的代碼是下面這樣的:

Person person = new Person();
string text = person.Description;
bool flag = text == null || text.Length == 0;
if (flag)
{
  Console.WriteLine("Description is IsNullOrEmpty");
}
text = person.Name;
bool flag2 = text != null && text.Length > 0;
if (flag2)
{
  char c = person.Name[0];
  if (c >= 'a')
  {
    if (c > 'z')
    {
      goto IL_8B;
    }
  }
  else if (c >= 'A')
  {
    if (c > 'Z')
    {
      goto IL_8B;
    }
  }
  else if (c != ',' && c != '.')
  {
    goto IL_8B;
  }
  bool flag3 = true;
  goto IL_8E;
  IL_8B:
  flag3 = false;
  IL_8E:
  bool flag4 = flag3;
  if (flag4)
  {
  }
}
bool flag5 = person.Name != null;
if (flag5)
{
}

Switch

這不僅適用于 is 也可以在 switch 中使用

switch (person.Age)
{
  case >= 0 and <= 3:
    Console.WriteLine("baby");
    break;

  case > 3 and < 14:
    Console.WriteLine("child");
    break;

  case > 14 and < 22:
    Console.WriteLine("youth");
    break;

  case > 22 and < 60:
    Console.WriteLine("Adult");
    break;

  case >= 60 and <= 500:
    Console.WriteLine("Old man");
    break;

  case > 500:
    Console.WriteLine("monster");
    break;
}

反編譯后的代碼:

int age = person.Age;
int num = age;
if (num < 22)
{
  if (num < 14)
  {
    if (num >= 0)
    {
      if (num > 3)
      {
        Console.WriteLine("child");
      }
      else
      {
        Console.WriteLine("baby");
      }
    }
  }
  else if (num > 14)
  {
    Console.WriteLine("youth");
  }
}
else if (num < 60)
{
  if (num > 22)
  {
    Console.WriteLine("Adult");
  }
}
else if (num > 500)
{
  Console.WriteLine("monster");
}
else
{
  Console.WriteLine("Old man");
}

More

可以看到有些情況下可以簡化不少代碼,尤其是 if 分支比較多的情況下使用上面 switch 這樣的寫法會清晰很多

但是如果只是 string.IsNullOrEmpty 這種代碼最好還是不要寫得這么騷了,小心要被同事吐槽了

炫技需謹慎,小心被 ...

Reference

https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9
https://github.com/WeihanLi/SamplesInPractice/tree/master/CSharp9Sample
https://github.com/WeihanLi/SamplesInPractice/blob/master/CSharp9Sample/PatternMatchingSample.cs

到此這篇關(guān)于C#9新特性之增強的模式匹配的文章就介紹到這了,更多相關(guān)C#9 模式匹配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

玉田县| 阳原县| 同仁县| 枝江市| 双柏县| 运城市| 乌拉特后旗| 襄汾县| 新巴尔虎右旗| 沅江市| 进贤县| 嘉善县| 南昌市| 交城县| 洛川县| 喜德县| 崇阳县| 新绛县| 资阳市| 岳西县| 红桥区| 和静县| 永川市| 长泰县| 新巴尔虎左旗| 台南县| 县级市| 图们市| 城固县| 明光市| 来宾市| 正镶白旗| 富顺县| 闸北区| 中宁县| 抚松县| 临澧县| 措美县| 法库县| 缙云县| 社旗县|