switch case 语法指定数据类型

switch case syntax specifies a data type

今天在工作中,我们不时地进行了代码审查,但今天我看到了一种我以前从未见过的语法。我在网上搜索了没用,更有趣的是,尽管使用相同版本的 Visual Studio,即 2017 Enterprise,但当我尝试重新创建时,我在家出现语法错误我今天在工作中看到的。它看起来像这样:

switch (someObject) {
    case TypeOne valueOne: action1(); break;
    case TypeTwo valueTwo: action2(); break;
    // ... and so on
}

换句话说,看起来他们同时检查了类型和值。但正如我所说,我无法在互联网上找到它,而且我在家里遇到语法错误。我知道 C# 7 中有很多新东西,尤其是在语法糖方面。你能解释一下吗?

这是一个 new C# 7 feature: 匹配类型的模式匹配 switch 语句。

此代码的作用,给出第一个分支:

  • 它检查 someObject 是否是、派生自或实现类型 TypeOne
  • 如果是这样,它会将 someObject 转换为类型 TypeOne,并分配给 valueOne
  • 然后进入case块,直接用valueOne.