有人可以告诉我为什么以下代码示例抛出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
在丢失范围之前处理对象在方法“EncapsulatingDisposableObject
。ReturnMyDisposableObject()'
中,在对象”System.IDisposable.Dispose
“之前调用TempBuffer
,然后再将其引用范围。
对于任何可能感兴趣的人来说,问题在于EncapsulatingDisposableObject
构造函数很简单
EncapsulatingDisposableObject(DisposableObject obj)
{
_disposableField = obj;
}
这导致编译器抱怨传递给它的参数没有正确处理。