代码分析警告即使我遵循MSDN指南CA2000:在丢失范围之前处置对象

时间:2017-05-11 07:48:39

标签: c# code-analysis

有人可以告诉我为什么以下代码示例抛出CA2000:在丢失范围之前处置对象代码分析警告和可能的修复。

    public static EncapsulatingDisposableObject ReturnMyDisposableObject(){
        DisposableObject TempBuffer = null;
        try
        {
            TempBuffer = new DisposableObject();
            EncapsulatingDisposableObject SB = null;
            EncapsulatingDisposableObject TmpSB = null;
            try
            {
                TmpSB = new EncapsulatingDisposableObject(TempBuffer);
                TempBuffer = null;
                SB = TmpSB;
                TmpSB = null;
                return SB;
            }
            finally
            {
                if (TmpSB != null)
                {
                    TmpSB.Dispose();
                }
            }              

        }

        finally
        {
            if (TempBuffer != null)
            {
                TempBuffer.Dispose();
            }


        }
}

CA2000在丢失范围之前处理对象在方法“EncapsulatingDisposableObjectReturnMyDisposableObject()'中,在对象”System.IDisposable.Dispose“之前调用TempBuffer,然后再将其引用范围。

对于任何可能感兴趣的人来说,问题在于EncapsulatingDisposableObject构造函数很简单

    EncapsulatingDisposableObject(DisposableObject obj)
{
   _disposableField = obj;
}

这导致编译器抱怨传递给它的参数没有正确处理。

0 个答案:

没有答案