Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对无约束泛型使用is运算符_C#_Msbuild_Visual Studio 2017_Visual Studio 2019_C# 7.2 - Fatal编程技术网

C# 对无约束泛型使用is运算符

C# 对无约束泛型使用is运算符,c#,msbuild,visual-studio-2017,visual-studio-2019,c#-7.2,C#,Msbuild,Visual Studio 2017,Visual Studio 2019,C# 7.2,C#版本:7.2 我的Ms构建版本:未知(如果有人能告诉我如何在我的机器上找到它,请告诉我) 我的Visual Studio版本:Visual Studio Professional 2019 我将把它归结到最低限度,所以忽略代码的简单性 public bool IsNull<T>(T thing) { return thing is null; } 它编译并返回false,因为int永远不会为null。我很高兴,一切都很好 然而,我的构建服务器并不满意。它正在使用MSBu

C#版本:7.2

我的Ms构建版本:未知(如果有人能告诉我如何在我的机器上找到它,请告诉我)

我的Visual Studio版本:Visual Studio Professional 2019

我将把它归结到最低限度,所以忽略代码的简单性

public bool IsNull<T>(T thing)
{
    return thing is null;
}
它编译并返回false,因为int永远不会为null。我很高兴,一切都很好

然而,我的构建服务器并不满意。它正在使用MSBuild v15.5.180.51428,并抛出一个编译器错误:

错误CS0403:无法将null转换为类型参数“TValue”,因为它可能是不可为null的值类型。考虑使用“默认值(t值)”< /P> 在使用VS2017的机器上也会发生这种情况

是否记录了此“修复/更改”。MSBuild的哪个版本可用


感谢编辑:这是VS 2019中的一个编译器错误-此功能仅在C#8中使用,从VS 2019更新1开始,您需要启用C#8以消除此消息

这是在编译器中所做的更改-至少需要Visual Studio 2019工具(MSBuild 16)来生成此代码


这是在VS 2019的PR中实现的:(虽然我的印象是需要为此启用C#8,但显然不是)。

这确实是一个bug。那里使用的模式是C#8.0模式,当语言版本设置为7.2时不应编译。这已经在我们的代码库中报告并修复了。它将在VS2019更新2附带的MSBuild中提供


is
更改为
=
?尝试使用“返回的东西是默认的;”,这将与其他对象一起工作Hanks Steve和Rufus。我有办法。我更想知道是否有人知道它是什么时候改变的。我相信
obj是空的
是在C#7fyi中添加的。我在讨论语言改变的GH问题上询问,以澄清C#语言和编译器版本,这是允许的:
IsNull(0); //thats an int