Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在键入“时阻止Resharper删除[CanBeNull]&引用;在引用类型名称的末尾?_C#_Resharper_Nullable - Fatal编程技术网

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

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; } 如果我在任

我正在经历将.NET4.8(不是核心!)项目转换为使用新的C#8“可空引用”功能的过程

为此,我依次更改每个源代码文件,添加
#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支持论坛上提出了这个问题,并收到了一个解决方案:

要解决此问题,请执行以下操作:

  • 转到扩展->重新竖琴->选项->环境->编辑器行为->C#
  • 找到并关闭选项“在类型名称后的“!”/“?”上注释为空”
  • 找到并关闭“在其他位置的“!”/“?”上注释为空”选项

  • 您是否尝试过设置
    警告
    ?这将在不启用可空批注的情况下启用可空警告,并且您仍然可以逐个文件浏览并启用可空批注。不过,它可能会带来许多不必要的警告。@canton7不幸的是,
    warnings
    设置对我们的.Net 4.8项目不起作用-该设置被忽略。(我假设您指的是
    .csproj
    文件中的设置。)啊,您仍然使用老式的csproj,而不是SDK样式?显然,旧式csproj中的
    会影响MSBuild,但不会影响VS()。如果您可以进行切换,SDK样式的版本会更好,但这是一个单独的问题。@canton7是的,我们打算在某个时候将代码库移植到.Net Core 3.x,但由于我们有数百万行代码,这将需要相当长的时间!请注意,SDK风格的csproj非常支持.NET Framework——它与.NET内核没有任何联系。将
    设置为
    net46
    或其他任何设置。