在新的空DataTable上使用“使用”是一种好习惯吗?

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 )吗?我不知道为什么,但是感觉不对。

Joh*_*ica 5

如我在评论中所述,您的最后一个示例将不起作用。如果要执行类似的操作,则可以将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)