2017-04-24 69 views
2

之前,C#7.0,下面的代码是有效的:不同的是X是X _

if(x is X) 
{ 
    //... 
} 

现在,下面也是正确的:

if(x is X _) 
{ 
    //... 
} 

Accoding到TryRoslyn,这些代码段生成相同的IL。我的问题是:模式匹配中丢弃操作符的用途是什么?我在这里错过了什么吗?

这个问题与that不一样,因为我要求丢弃运算符(通配符)的目的是专门用于模式匹配(is运算符)。

+0

这个问题是专门针对'is'还是你只是想知道'_'通配符能派上用场? – EpicKip

+0

@epickip专门用于'is' – Logerfo

+3

有无数的编写代码的方法是无用的。 *禁止*您编写对您无用的代码不是C#的工作。即使*尝试了*,它也不能这样做。 C#的工作是*允许*您编写* *有用的代码。 – Servy

回答

2

根据Neal Gafter,丢弃运算符在这种情况下是这是非常没用的,至少现在。

1

这还没有用。但是,当引入递归模式匹配(希望在C#8.0中)时,在模式的一部分中放弃丢弃会很有用。

细节尚未最终确定,但可以想象如is (1, (_, 3))或可能的is X (1, Y (_, 3))