案例标签的正确语法是什么? 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那里下载了我认为是最新版本的文件。
答案 0 :(得分:5)
这是C#7中引入的新模式匹配语法。它基本上测试NavigationRootPage.RootFrame?.Content
是什么类型。例如,如果它是ItemPage
,则将其值放入名为itemPage
的变量中。这很方便,因为您不必使用is
和as
运算符来检查每种类型和类型。
您不会在语言规范中找到该规范,因为该规范的最新官方发行版是针对C#5的。I know they are drafting a spec for C# 6,但我还没有听到有关C#7规范的任何消息。要查看模式匹配语法的规范,可以根据Camilo Terevinto的建议here找到建议。
要使警告消失,请将newControlsPage
和allControlsPage
替换为_
。