Yel*_*yev 7 c# pattern-matching c#-7.0
假设我有Base和Child1,Child2,Child3班,我有以下代码:
Base b; // value is acquired
switch (b)
{
case Child1 child1:
ProcessChild1(child1);
break;
case Child2 child2:
case Child3 child3:
ProcessAnyOther(b); // <--
break;
default:
throw new ArgumentOutOfRangeException(nameof(b));
}
Run Code Online (Sandbox Code Playgroud)
请注意,在注释行,我不需要这些child2,child3因为它不不管什么类型的变量,如果它不是child1.
Resharper建议我可以安全地删除未使用的变量.这是有趣的部分.
我不能这样做:
case Child2:
case Child3:
Run Code Online (Sandbox Code Playgroud)
因为它导致"类名在此时无效"语法错误.
这种用法似乎最适合我.
我不能这样做:
case Child2 nevermind:
case Child3 nevermind:
Run Code Online (Sandbox Code Playgroud)
因为它导致"冲突的变量"错误.顺便说一下,如果ProcessAnyOther方法接受了更精确的类型(base for Child2和Child3),并且我用nevermind参数而不是语句调用它,那么这个语句就有意义了b.
但是,我可以这样做:
case Child2 _:
case Child3 _:
Run Code Online (Sandbox Code Playgroud)
它甚至没有创建"_"变量.这正是Resharper建议做的事情.
我的问题是:这是什么?还可以在哪里使用它?这个"_"运算符或语言部分是如何调用的?它是C#语言规范的一部分吗?