C# 如何在键入“时阻止Resharper删除[CanBeNull]&引用;在引用类型名称的末尾?
我正在经历将.NET4.8(不是核心!)项目转换为使用新的C#8“可空引用”功能的过程 为此,我依次更改每个源代码文件,添加C# 如何在键入“时阻止Resharper删除[CanBeNull]&引用;在引用类型名称的末尾?,c#,resharper,nullable,C#,Resharper,Nullable,我正在经历将.NET4.8(不是核心!)项目转换为使用新的C#8“可空引用”功能的过程 为此,我依次更改每个源代码文件,添加#nullable enable并用?后缀修饰所有可空引用。这允许我以一种零碎的方式转换所有代码以使用新功能 在源代码文件中考虑以下方法:可空可启用< /代码>: #nullable enable [CanBeNull] public static string Test([CanBeNull] string arg) { return arg; } 如果我在任
#nullable enable
并用?
后缀修饰所有可空引用。这允许我以一种零碎的方式转换所有代码以使用新功能
在源代码文件中考虑以下方法:<代码>可空可启用< /代码>:
#nullable enable
[CanBeNull] public static string Test([CanBeNull] string arg)
{
return arg;
}
如果我在任一字符串
声明后键入“?”(为了使用新的C#8“nullable”功能),Resharper将删除[CanBeNull]
属性:
public static string? Test(string? arg)
{
return arg;
}
但是,如果删除了该属性,则Resharper不会警告我在其他源文件中可能使用空引用。(如果所有源文件都指定了#nullable enable
,这不会是一个问题,但由于我正在以零碎的方式转换文件,有许多文件尚未指定#nullable enable
,因此编译器不会警告我可能的空引用使用,也不会重新进行harper,因为他[CanBeNull]
已被删除。)
所以我的问题是:
当我在引用类型名称的末尾键入?
时,是否有方法阻止Resharper删除[CanBeNull]
属性?
我已经搜索了所有的Resharper选项,但没有找到相应的选项。我在Resharper支持论坛上提出了这个问题,并收到了一个解决方案: 要解决此问题,请执行以下操作:
您是否尝试过设置
警告
?这将在不启用可空批注的情况下启用可空警告,并且您仍然可以逐个文件浏览并启用可空批注。不过,它可能会带来许多不必要的警告。@canton7不幸的是,warnings
设置对我们的.Net 4.8项目不起作用-该设置被忽略。(我假设您指的是.csproj
文件中的设置。)啊,您仍然使用老式的csproj,而不是SDK样式?显然,旧式csproj中的
会影响MSBuild,但不会影响VS()。如果您可以进行切换,SDK样式的版本会更好,但这是一个单独的问题。@canton7是的,我们打算在某个时候将代码库移植到.Net Core 3.x,但由于我们有数百万行代码,这将需要相当长的时间!请注意,SDK风格的csproj非常支持.NET Framework——它与.NET内核没有任何联系。将
设置为net46
或其他任何设置。