CA1821删除空的终结器

时间:2017-10-18 19:55:36

标签: 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!");
        }
    }
}

1 个答案:

答案 0 :(得分:7)

这看起来是a bug in the Analyzer

从6月23日的问题发表评论:

  

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

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