我真的很想把这件事从我的脑海里赶出去。请看下面的代码:
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 块仅确保对象在作用域之后被释放。
您的第一个代码对我来说看起来不错,不需要更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)