Evi*_*lDr 4 c# idisposable using-statement
我一直在重写一些旧代码,以便该using语句用于我的DataTables,而不是Dispose每次都记住:
using (DataTable dt = BLL.GetDataTable()) {
foreach(DataRow dr in dt.Rows) {
// iteration logic
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在一种特定情况下,DataTable的内容基于变量而有所不同,因此我创建了初始DataTable,然后再分配值:
DataTable dt = new DataTable();
switch(foo) {
case bar:
dt = BLL.GetDataTable(bar);
break;
default:
dt = BLL.GetDataTable();
break;
}
// iteration logic here
dt.Dispose();
Run Code Online (Sandbox Code Playgroud)
更改为使用using,我有:
using (DataTable dt = new DataTable()) {
switch(foo) {
case bar:
dt = BLL.GetDataTable(bar);
break;
default:
dt = BLL.GetDataTable();
break;
}
// iteration logic here
}
Run Code Online (Sandbox Code Playgroud)
那是好的做法(即empty使用using语句创建DataTable )吗?我不知道为什么,但是感觉不对。
如我在评论中所述,您的最后一个示例将不起作用。如果要执行类似的操作,则可以将DataTable生成移到一个单独的函数中:
public DataTable GetBLLDataTable()
{
switch(foo)
{
case bar:
return BLL.GetDataTable(bar);
break;
default:
return BLL.GetDataTable();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在using语句中使用此方法返回的DataTable:
using (DataTable dt = GetBLLDataTable()) {
// iteration logic here
}
Run Code Online (Sandbox Code Playgroud)