C#7.0类型模式匹配用法没有变量
假设我有Base和Child1,Child2,Child3类,我有以下代码:
Base b; // value is acquired switch (obj) { case Child1 child1: ProcessChild1(child1); break; case Child2 child2: case Child3 child3: ProcessAnyOther(b); // <-- break; default: throw new ArgumentOutOfRangeException(nameof(b)); } 请注意,在注释行中,我不需要这些child2,child3变量,因为它不是什么类型,如果它不是child1. >我做不到: case Child2: case Child3: 因为它导致“类名在此时无效”语法错误. case Child2 nevermind: case Child3 nevermind: 因为它导致“冲突的变量”错误.顺便说一句,如果ProcessAnyOther方法接受更精确的类型(Child2和Child3的基础)并且我使用nevermind参数而不是b调用它,则此语句将有意义. case Child2 _: case Child3 _: 它甚至没有创建“_”变量. 我的问题是:这是什么?还可以在哪里使用它?这个“_”运算符或语言部分是如何调用的?它是C#语言规范的一部分吗? 解决方法
它被称为
discard,是的,它是C#7规范的一部分.
来自链接的文章:
通过命名变量_,您告诉编译器您将永远不会再次访问此变量,因此它可以忽略您在前两个版本中遇到的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |