将 is 运算符与无约束泛型一起使用
Using the is operator with unconstrained generics
C#版本:7.2
我的 Ms Build 版本:未知(如果有人能告诉我如何在我的机器上找到它,请告诉我)
我的 Visual Studio 版本:Visual Studio Professional 2019
我将把它归结为最低限度,所以请忽略代码的简单性。
public bool IsNull<T>(T thing)
{
return thing is null;
}
在 Visual studio 2019 年,这很好并且可以编译。
我可以这样称呼它
IsNull(0); //thats an int
它编译并且 returns 错误,因为整数永远不会为空。我很开心,一切都很好。
但是我的构建服务器不满意。它使用 MSBuild v15.5.180.51428 并抛出编译器错误
error CS0403: Cannot convert null to type parameter 'TValue' because it could be a non-nullable value type. Consider using 'default(TValue)'
这也发生在使用 VS2017 的同事机器上
这个 'fix/change' 是否已记录在案。它适用于哪个版本的 MSBuild?
谢谢
编辑:这是 VS 2019 中的编译器错误 - 此功能仅在 C# 8 中,从 VS 2019 Update 1 开始,您需要启用 C# 8 才能消除此消息。
这是在编译器中所做的更改 - 您至少需要 Visual Studio 2019 工具 (MSBuild 16) 来构建此代码。
这是在 VS 2019 的此 PR 中实现的:recursive-patterns(18): Permit a constant pattern to be used with an open type as input(尽管我的印象是需要为此启用 C# 8,但显然不需要)。
这确实是一个错误。那里使用的模式是 C# 8.0 模式,当语言版本设置为 7.2 时不应编译。不过,这已经在我们的代码库中进行了报告和修复。它将在 VS2019 Update 2 附带的 MSBuild 中提供。
C#版本:7.2
我的 Ms Build 版本:未知(如果有人能告诉我如何在我的机器上找到它,请告诉我)
我的 Visual Studio 版本:Visual Studio Professional 2019
我将把它归结为最低限度,所以请忽略代码的简单性。
public bool IsNull<T>(T thing)
{
return thing is null;
}
在 Visual studio 2019 年,这很好并且可以编译。
我可以这样称呼它
IsNull(0); //thats an int
它编译并且 returns 错误,因为整数永远不会为空。我很开心,一切都很好。
但是我的构建服务器不满意。它使用 MSBuild v15.5.180.51428 并抛出编译器错误
error CS0403: Cannot convert null to type parameter 'TValue' because it could be a non-nullable value type. Consider using 'default(TValue)'
这也发生在使用 VS2017 的同事机器上
这个 'fix/change' 是否已记录在案。它适用于哪个版本的 MSBuild?
谢谢
编辑:这是 VS 2019 中的编译器错误 - 此功能仅在 C# 8 中,从 VS 2019 Update 1 开始,您需要启用 C# 8 才能消除此消息。
这是在编译器中所做的更改 - 您至少需要 Visual Studio 2019 工具 (MSBuild 16) 来构建此代码。
这是在 VS 2019 的此 PR 中实现的:recursive-patterns(18): Permit a constant pattern to be used with an open type as input(尽管我的印象是需要为此启用 C# 8,但显然不需要)。
这确实是一个错误。那里使用的模式是 C# 8.0 模式,当语言版本设置为 7.2 时不应编译。不过,这已经在我们的代码库中进行了报告和修复。它将在 VS2019 Update 2 附带的 MSBuild 中提供。