C# 代码分析警告,即使我遵循MSDN指南CA2000:在失去作用域之前处理对象
有人能告诉我为什么下面的代码示例抛出了C# 代码分析警告,即使我遵循MSDN指南CA2000:在失去作用域之前处理对象,c#,code-analysis,C#,Code Analysis,有人能告诉我为什么下面的代码示例抛出了CA2000:在失去作用域之前处理对象代码分析警告和可能的修复 public static EncapsulatingDisposableObject ReturnMyDisposableObject(){ DisposableObject TempBuffer = null; try { TempBuffer = new DisposableObject();
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
在方法“封装DisposableObject
ReturnMyDisposableObject()”
中,在对象“TempBuffer
”上调用System.IDisposable.Dispose
,然后在对象的所有引用都超出范围之前对其进行处理
对任何可能感兴趣的人来说,问题在于封装DisposableObject
构造函数,这很简单
EncapsulatingDisposableObject(DisposableObject obj)
{
_disposableField = obj;
}
这会导致编译器抱怨传递给它的参数没有正确处理。您是否尝试过DisposableObject TempBuffer=null;在try?Better中,您可以使用
using
块在内部调用Dispose()
。实际上,如果您总是在finally块之外为对象置零,它将永远不会调用Dispose?我不能使用using块,因为TempBuffer
已分配给封装DisposableObject
类中的一个字段。我想不出任何其他地方可以将null分配给TempBuffer,因为它在调用封装DisposableObject
的构造函数之前不能为null。基本上封装DisposableObject
有一个类型为DisposableObject
的字段,该字段在构造函数中初始化。