所以我接手一个现有的项目,前一个程序员做了很多有趣的事情。
我看到的最多但并不是真正理解的是以下代码块
finally
{
if (conn != null)
{
conn.Close();
ds.Dispose();
}
}
return ds;
VS2010没有抱怨,该项目按计划运作,但这对我来说很不错。
如何处理然后归还?除非最终以某种方式返回?!
如果有人可以解释为什么这是合法的?或任何其他解释将不胜感激。
答案 0 :(得分:3)
在从ds
撤回method
之前处置{{1}}是不正确的,因为您将丢失数据集中的信息。 在finally块中处理连接似乎完全没问题,但是数据集 ds必须返回到调用方法。
答案 1 :(得分:1)
当你不再需要它们时,你应该.Dispose()对象。显然,在这个例子中处理完DataSet后你需要它,所以你绝对不应该把它放在这里。
。对DataSet的Dispose()实际上可能没有做任何事情,这就是代码看起来有用的原因。请记住.Dispose()意味着关闭并最终确定垃圾收集器无法完成的资源使用,或者为了立即处理这些资源而不是垃圾收集器启动时。 但是你不应该依赖于DataSet上的.Dispose()而不做任何事情 - 可能存在它确实做某事的情况。修复代码。
答案 2 :(得分:0)
就像它看起来ds在返回时被处理掉,在运行代码时它是否会给你任何错误,如果是这样重构代码,并且//注释ds.Dispose
答案 3 :(得分:0)
当您调用Dispose()函数时,您只是标记要被垃圾收集的对象,您不会立即“释放/销毁”该对象。这就是代码工作的原因。如果这个逻辑没有任何意义,你总是可以这样做:
try{
// ... your code
return ds;
}
catch(Exception x)
{
// ... Exception code
}
finally
{
if (conn != null)
{
conn.Close();
ds.Dispose();
}
}