C# 对无约束泛型使用is运算符
C#版本:7.2 我的Ms构建版本:未知(如果有人能告诉我如何在我的机器上找到它,请告诉我) 我的Visual Studio版本:Visual Studio Professional 2019 我将把它归结到最低限度,所以忽略代码的简单性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
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