X之间的区别是X _

时间:2017-04-24 14:15:23

标签: c# c#-7.0

在C#7.0之前,以下代码有效:

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

现在,以下内容也有效:

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

TryRoslyn进行编码,这些代码部分生成相同的IL。我的问题是:如果没有必要,丢弃运算符在模式匹配中的目的是什么?我在这里错过了什么吗?

这个问题与that一个问题不同,因为我专门针对模式匹配(is运算符)询问了丢弃运算符(通配符)的用途。

2 个答案:

答案 0 :(得分:2)

根据Neal Gafter,丢弃运算符在这种情况下它几乎没用,至少目前如此。

答案 1 :(得分:1)

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

详细信息尚未最终确定,但请设想is (1, (_, 3))is X (1, Y (_, 3))之类的内容。