【发布时间】:2011-07-30 21:30:27
【问题描述】:
我正在做代码审查,发现很多代码格式如下:
public MyResponse MyMethod(string arg)
{
using (Tracer myTracer = new Tracer(Constants.TraceLog))
{
MyResponse abc = new MyResponse();
// Some code
return abc;
}
}
当我运行代码分析时,我收到 CA2000 警告 Microsoft.Reliability
代码是否应该改写为:
public MyResponse MyMethod(string arg)
{
MyResponse abc = new MyResponse();
using (Tracer myTracer = new Tracer(Constants.TraceLog))
{
// Some code
}
return abc;
}
还是没关系?
编辑
报告警告的行是:
MyResponse abc = new MyResponse();
MyResponse 是标准数据集。
完整的错误信息是:
警告 150 CA2000:Microsoft.Reliability:在方法“xxxxx(Guid, Guid)”中,对象“MyResponse”并未沿所有异常路径进行处理。在对对象“MyResponse”的所有引用超出范围之前调用 System.IDisposable.Dispose。
【问题讨论】:
-
是
MyResponseIDisposable? -
这个警告没有任何意义恕我直言......我看不出第二个版本会更好的任何理由
-
@Jon,不管是不是,
MyResponse不受using的处置语义的约束。这不是这里的问题,除了返回的对象。 -
您是否出于某种原因将警告文本保密?我们没有精神力量;如果您想诊断错误消息发布消息。
-
@Eric:通常情况下,我会同意你的看法,但 CA2000 和他的例子很清楚,你不这么认为吗?