键入“?”时如何阻止 Resharper 删除 [CanBeNull]在引用类型名称的末尾?

How to stop Resharper from removing [CanBeNull] when typing "?" at the end of a reference type name?

我正在完成将我的 .Net 4.8(不是 Core!)项目转换为使用新的 C# 8 "nullable reference" 功能的过程。

为此,我依次更改每个源代码文件,添加 #nullable enable 并使用 ? 后缀修饰所有可为 null 的引用。这使我可以零碎地转换所有代码以使用新功能。

现在考虑在指定了 #nullable enable 的源文件中使用以下方法:

#nullable enable

[CanBeNull] public static string Test([CanBeNull] string arg)
{
    return arg;
}

如果我输入“?”在任一 string 声明之后(为了使用新的 C# 8 "nullable" 功能),Resharper 删除了 [CanBeNull] 属性:

public static string? Test(string? arg)
{
    return arg;
}

但是,如果该属性被删除,则 Resharper 不会警告我其他源文件中可能使用空引用。 (如果 all 源文件指定了 #nullable enable,这将不是问题,但是因为我正在零碎地转换文件,所以有很多文件还没有指定了 #nullable enable,因此编译器不会警告我可能使用空引用 - Resharper 也不会,因为 [CanBeNull] 已被删除。)

所以我的问题是:

当我在引用类型名称末尾键入 ? 时,是否有办法阻止 Resharper 删除 [CanBeNull] 属性?

我已经搜索了所有的 Resharper 选项,但我还没有为此找到一个选项。

我在 Resharper 支持论坛上问了这个问题,并得到了解决方案:

https://resharper-support.jetbrains.com/hc/en-us/community/posts/360006676140-How-to-stop-Resharper-from-removing-CanBeNull-when-typing-at-the-end-of-a-reference-type-name-

修复它:

  1. 转到扩展 -> Resharper -> 选项 -> 环境 -> 编辑器行为 -> C#
  2. 找到并关闭选项“Annotate nullability on '!'/'?'在键入名称后".
  3. 找到并关闭选项“Annotate nullability on '!'/'?'在其他位置"