键入“?”时如何阻止 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 支持论坛上问了这个问题,并得到了解决方案:
修复它:
- 转到扩展 -> Resharper -> 选项 -> 环境 -> 编辑器行为 -> C#
- 找到并关闭选项“Annotate nullability on '!'/'?'在键入名称后".
- 找到并关闭选项“Annotate nullability on '!'/'?'在其他位置"
我正在完成将我的 .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 支持论坛上问了这个问题,并得到了解决方案:
修复它:
- 转到扩展 -> Resharper -> 选项 -> 环境 -> 编辑器行为 -> C#
- 找到并关闭选项“Annotate nullability on '!'/'?'在键入名称后".
- 找到并关闭选项“Annotate nullability on '!'/'?'在其他位置"