“T”类型的表达式不能由“<null>”类型的模式处理

kof*_*fus 0 c# visual-studio-2019

这是一个最小的示例:

class C {
  public bool F<T>(T x) => x is null;
}
Run Code Online (Sandbox Code Playgroud)

导致问题的真正代码在这里https://github.com/kofifus/With/blob/master/With.cs#L35

直到今天这编译得很好,但我刚刚升级到

Microsoft Visual Studio Community 2019 Preview Version 16.1.0 Preview 2.0

代码现在出现以下错误:

Error CS8511 An expression of type 'T' cannot be handled by a pattern of type '<null>'. Please use language version 'preview' or greater to match an open type with a constant pattern.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么 ?解决这个问题的正确方法是什么?

note1 - 我不想要 C# 语言预览 ATM
note2 - 如果我更改x is null为它仍然可以编译x==null

NPr*_*ras 5

添加到提到的解决方案中,这曾经对您有用的事实很可能是由 2019 预览版中的错误引起的

但是,在 Visual Studio 2019 中,我们错误地允许它在语言版本 7.0、7.1、7.2 和 7.3 中编译。在 Visual Studio 2019 更新 1 中,我们会将其设为错误(就像在 Visual Studio 2017 中一样),并建议更新到预览版或 8.0。

似乎允许is null开放泛型成为 C#8 的一部分并在此处受到支持。该错误最终可能会告诉您在发布后升级到 C#8(而不是“预览版”)。