假设我有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));
}
请注意,在注释行中,我不需要这些child2
,child3
个变量,因为它不具有什么类型,如果它不是{{1} }。
Resharper建议我可以安全地删除未使用的变量。这是有趣的部分。
我做不到:
child1
因为它导致&#34;类名在此时无效&#34;语法错误 这种用法似乎最适合我。
我做不到:
case Child2:
case Child3:
因为它会导致&#34;冲突的变量&#34;错误。顺便说一下,如果case Child2 nevermind:
case Child3 nevermind:
方法接受更精确的类型(ProcessAnyOther
和Child2
的基础)并且我使用Child3
参数而不是{{nevermind
调用它,则此语句将有意义1}}。
但是,我可以这样做:
b
它甚至没有创造&#34; _&#34;变量。 这正是Resharper建议做的事情。
我的问题是:这是什么?还可以在哪里使用它?这是怎么回事?&#34; _&#34;运营商或语言部分叫什么?它是C#语言规范的一部分吗?
答案 0 :(得分:7)
它被称为discard,是的,它是C#7规范的一部分。
来自链接文章:
丢弃是您可以分配但无法读取的本地变量。即它们是“只写”局部变量。它们没有名称,相反,它们表示为
_
是一个上下文关键字,它与var非常相似,_
无法读取(即不能出现在右侧)任务。)
通过命名变量_
,您告诉编译器您将永远不会再次访问此变量,因此它可以忽略您在前两个版本中遇到的问题。