使用具有不受约束的仿制药的IS运算符



c#版本:7.2

我的MS构建版本:未知(如果有人可以告诉我如何在我的机器上找到它(

我的Visual Studio版本:Visual Studio Professional 2019

我要将其归结至最低限度,所以请忽略代码的简单性。

public bool IsNull<T>(T thing)
{
    return thing is null;
}

在Visual Studio 2019中,这很好并且编译。

我可以像这样称呼它

IsNull(0); //thats an int

它会编译和返回false,因为INT永远不会为空。我很高兴,一切都很好。

但是,我的构建服务器并不高兴。它正在使用MSBUILD v15.5.180.51428,并引发了一个编译器错误

错误CS0403:无法将null转换为type parameter" tvalue",因为它可能是不可删除的值类型。考虑使用"默认(TVAlue("

使用VS2017

,这也发生在同事机器上

已记录了此"修复/更改"。

中有什么版本的msbuild可用

谢谢

这确实是一个错误。在那里使用的模式是C#8.0模式,当语言版本设置为7.2时,不应编译。不过,这已经在我们的代码库中进行了报告和修复。它将在VS2019 Update 2随附的MSBUILD中提供。

  • https://github.com/dotnet/roslyn/issues/34678

编辑:这是VS 2019中的编译器错误 - 此功能仅在C#8中,并且从VS 2019 Update 1中使用,您需要启用C#8以摆脱此消息。<<<<<<<<<<<<<</p>

这是编译器中已经进行的更改 - 您至少需要Visual Studio 2019工具(MSBUILD 16(来构建此代码。

这是在VS 2019的此PR中实现的:递归模式(18(:允许使用开放类型作为输入的恒定模式(尽管我的印象是需要为此启用C#8但显然不是(。

相关内容

  • 没有找到相关文章

最新更新