【问题标题】:Difference between is X and is X _is X 和 is X 之间的区别 _
【发布时间】: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() 是可能的,但毫无意义。

标签: c# c#-7.0


【解决方案1】:

根据Neal Gafter,丢弃运算符在这种情况下几乎没有用,至少现在是这样。

【讨论】:

    【解决方案2】:

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

    细节尚未最终确定,但可以想象is (1, (_, 3))is X (1, Y (_, 3)) 之类的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2011-03-04
      • 2013-06-14
      相关资源
      最近更新 更多