否定的是(!is)?

时间:2019-06-12 13:52:07

标签: c#

我有类似以下代码:

if (variable !is AnyType)
{
    // TODO
}

但是!is到底是什么,它是否是负数,并且在最新的C#(不是预览版)中受支持?

1 个答案:

答案 0 :(得分:2)

在您的评论中,您说这是骑士没有告诉您它无效。

但是,无效代码。您将无法使用此构造来编译C#代码。

但是,似乎Rider也没有表明这是无效的代码:

Rider rendering code

应在代码下方添加“ squigglies”,如本例所示:

Rider rendering other code

因此,这似乎是解析器中处理语法突出显示和验证的错误。

无论如何,代码 无效,并且无法编译:

Build errors


从lv Misticos的答案(现已删除)来看,这可能是C#8预览中的合法代码,但现在无效。

好,现在变得很清楚了。

在C#8预览中,!不与is运算符关联,而是与变量关联,因此您所理解的是:

if (variable! is AnyType)

让我用伪代码重新表达一下:

if (variable /* that isn't null, honestly, just trust me*/ is AnyType)

是的,如果所有C#8计划都实现了,这实际上将是合法的C#代码。

我想JetBrains提前添加了对C#8语法高亮显示的支持。我仍然说这是Rider中的某种形式的错误,在实际得到支持之前,他们不应该允许将来的C#语法。例如,我没有安装C#8或任何此类预览,因此我的PC上可以使用的最新C#Rider是7.3(我认为)。