CA1821删除空的终结器

apo*_*pse 6 c# .net-core visual-studio-2017

为什么VS抱怨这个终结者?

VS 2017 - 15.3.5
Microsoft Code Analysis 2017 - 2.3.0.62003

using System;

namespace ConsoleApp
{
    class DisposableClass : IDisposable
    {
#if DEBUG
        ~DisposableClass() // CA1821 Remove empty Finalizers
        {
            System.Diagnostics.Debug.Fail("Forgot Dispose?");
        }
#endif

        public void Dispose()
        {
#if DEBUG
            GC.SuppressFinalize(this);
#endif
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*son 8

这看起来像是分析器中的一个错误.

从6月23日的问题评论:

@nguerrera谢谢,分析师报告发布版本的有效问题,你是对的.但是,分析仪中仍然存在问题 - 如果封闭方法也被有条件地排除,则不应触发.例如,以下内容仍会在发布和调试版本中触发诊断.

#if DEBUG
    ~InvisibleEditor()
    {
        Debug.Assert(Environment.HasShutdownStarted, GetType().Name + " was leaked without Dispose being called.");
    }
#endif
Run Code Online (Sandbox Code Playgroud)

  • 如果您更改为释放,然后重新启动VS,它将灰显.如果你想改回Debug,你还需要重启VS. 但它只是视觉效果. (2认同)