【发布时间】:2017-04-24 14:15:23
【问题描述】:
在 C# 7.0 之前,以下代码有效:
if(x is X)
{
//...
}
现在,以下内容也有效:
if(x is X _)
{
//...
}
根据TryRoslyn,这些代码段生成相同的 IL。我的问题是:模式匹配中丢弃运算符的目的是什么,如果没有必要也没有用?我在这里遗漏了什么吗?
这个问题与that 不一样,因为我问的是丢弃运算符(通配符)的目的,专门用于模式匹配(is 运算符)。
【问题讨论】:
-
这个问题是专门针对
is的,还是您只是想知道_通配符在哪里可以派上用场? -
@epickip 专为
is -
有无数种编写无用代码的方法。 禁止您编写对您无用的代码不是 C# 的工作。即使它尝试过,它也无法这样做。 C# 的工作是允许你编写是有用的代码。
-
@Will 示例在我的问题中的 try roslyn 链接中。例如,如果将两个下划线都更改为
a,则会导致编译错误 -
是的,但是语法来自新功能,您可以在这种情况下使用它只是一个人工制品。没有人建议你会使用它,只是它是可能的。就像在字符串上做
ToString()是可能的,但毫无意义。