gpt4 book ai didi

C# using 语句

转载 作者:太空狗 更新时间:2023-10-29 20:08:51 26 4
gpt4 key购买 nike

我真的很想把这件事从我的脑海中抹去。请看下面的代码:

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 block 的吗? 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 block 。从您的代码开始,以下是 C# 编译器将 using block 转换为 try/finally block 的方式。

        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();
}

正如您从代码中看到的那样,无论返回语句如何,resultTable 都会被释放。 using block 仅确保对象在作用域之后被释放。

我觉得你的第一个代码没问题,不需要更改。

关于C# using 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com