Geo*_*Ego 4 .net c# idisposable return dataset
我有一个C#函数来翻转DataSet的方向:
static DataSet FlipDataSet(DataSet my_DataSet)
{
using (DataSet ds = new DataSet())
{
foreach (DataTable dt in my_DataSet.Tables)
{
DataTable table = new DataTable();
for (int i = 0; i <= dt.Rows.Count; i++)
{
table.Columns.Add(Convert.ToString(i));
}
DataRow r = null;
for (int k = 0; k < dt.Columns.Count; k++)
{
r = table.NewRow();
r[0] = dt.Columns[k].ToString();
for (int j = 1; j <= dt.Rows.Count; j++)
r[j] = dt.Rows[j - 1][k];
table.Rows.Add(r);
}
ds.Tables.Add(table);
table.Dispose();
}
return ds;
}
}
Run Code Online (Sandbox Code Playgroud)
我从在interwebs上找到的片段修改了这段代码,将创建的DataSet包装在using语句中,并显式处理它创建的IDisposable对象.我的问题是,在处理时,DataSet(上面代码中的"ds")在返回时会发生什么?我退回后无法在ds上显式调用.Dispose(),显然,.NET返回值然后正确处理它,或者我完全错过了什么?
JSB*_*ոգչ 12
你可能不想这样做.在DataSet当配置using块退出不管如何块退出(正常退出,返回或抛出的异常),这意味着你返回值将被设置,并且大部分是不可用的给调用者.
正确的做法是using在此功能中没有阻止.该using块应该在调用者中.
该ds DataSet会只要你离开配置using块,所以你会返回一个配置DataSet给调用者.
为什么这么说,你不能叫Dispose上DataSet你回来之后呢?我怀疑这正是你需要做的.
using从FlipDataSet方法中删除块,然后在返回DataSet的调用代码中处理它,最好将其包装在一个using块中.
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |