首页 > 解决方案 > 键入“?”时如何阻止 Resharper 删除 [CanBeNull] 在引用类型名称的末尾?

问题描述

我正在将我的 .Net 4.8(不是 Core!)项目转换为使用新的 C# 8“可空引用”功能。

为此,我依次更改每个源代码文件,方法是使用后缀添加#nullable enable和装饰所有可为空的引用。?这允许我以零碎的方式转换我的所有代码以使用新功能。

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

#nullable enable

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

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

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

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

所以我的问题是:

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

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

标签: c#resharpernullable

解决方案


我在 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-参考类型名称-

要解决这个问题:

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

推荐阅读