C#开关标签systax

时间:2018-08-03 00:39:50

标签: c# switch-statement

案例标签的正确语法是什么? C#规范说:

switch-statement:
switch   (   expression   )   switch-block
switch-block:
{   switch-sectionsopt   }
switch-sections:
switch-section
switch-sections   switch-section
switch-section:
switch-labels   statement-list
switch-labels:
switch-label
switch-labels   switch-label
switch-label:
case   constant-expression   :
default   :

因此case语句为'case',后跟一个常量,后跟一个:。 但是,在我从Microsoft的GitHub下载的某些代码中,它具有以下内容:

  switch (NavigationRootPage.RootFrame?.Content)
  {
    case ItemPage itemPage:
      itemPage.SetInitialVisuals();
      break;
    case NewControlsPage newControlsPage:
    case AllControlsPage allControlsPage:
      NavigationRootPage.Current.NavigationView.AlwaysShowHeader = false;
      break;
  }

在reshaper中,它说newControlPage是一个从未使用过的变量。

C#规范也不正确。

我刚刚从MS那里下载了我认为是最新版本的文件。

1 个答案:

答案 0 :(得分:5)

这是C#7中引入的新模式匹配语法。它基本上测试NavigationRootPage.RootFrame?.Content是什么类型。例如,如果它是ItemPage,则将其值放入名为itemPage的变量中。这很方便,因为您不必使用isas运算符来检查每种类型和类型。

您不会在语言规范中找到该规范,因为该规范的最新官方发行版是针对C#5的。I know they are drafting a spec for C# 6,但我还没有听到有关C#7规范的任何消息。要查看模式匹配语法的规范,可以根据Camilo Terevinto的建议here找到建议。

要使警告消失,请将newControlsPageallControlsPage替换为_