我真的想把这个弄出来.请看下面的代码:
using (DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString,"SELECT * FROM MyDBTable")) { List<string> resultsList = new List<string>(); foreach (DataRow dataRow in resultTable.Rows) { resultsList.Add(dataRow[0].ToString()); } return resultsList; }
数据表是否处理?有人可以解释这是如何转换为try / catch / finally块的吗? MSDN声明如果发生异常,仍会调用Dispose方法但是return语句呢?
或者我应该使用下面的代码:
List<string> resultsList = new List<string>(); using (DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString,"SELECT * FROM MyDBTable")) { foreach (DataRow dataRow in resultTable.Rows) { resultsList.Add(dataRow[0].ToString()); } } return resultsList;
可能应该使用第二个,但我只需要启蒙:).请解释.谢谢.
解决方法
using语句只是语法糖,它被转换为try / finally块.从代码开始,这里是C#编译器如何将using块转换为try / finally块.
try { DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString,"SELECT * FROM MyDBTable"); List<string> resultsList = new List<string>(); foreach (DataRow dataRow in resultTable.Rows) { resultsList.Add(dataRow[0].ToString()); } return resultsList; } finally { resultTable.Dispose(); }
正如您从代码中看到的那样,无论return语句如何,resultTable都会被放置. using块仅确保对象在范围之后被释放.
您的第一个代码对我来说没问题,无需更改.