在我的下面的函数中...我想返回DataTable ..
我应该转换以下行
DataTable table = CreateTable<T>();
以下
using(DataTable table = CreateTable<T>())
{
}
public static DataTable ConvertTo<T>(IList<T> list)
{
DataTable table = CreateTable<T>();
int iColCount = table.Columns.Count;
for (int j = 0; j < iColCount; j++)
{
DataColumn myDC = table.Columns[j];
myDC.DataType = System.Type.GetType("System.String");
}
Type entityType = typeof(T);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
foreach (T item in list)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
{
row[prop.Name] = prop.GetValue(item);
} table.Rows.Add(row);
}
return table;
}
答案 0 :(得分:2)
你为什么会这样?
using (obj)
{
// Do something
}
基本上与:
相同try
{
// Do something
}
finally
{
obj.Dispose();
}
重点是在您不再需要对象时释放对象使用的资源。在您的情况下,您将数据表返回到调用函数,因此您仍然需要它。因此,没有理由将您的函数包装在using
语句中。
答案 1 :(得分:0)
使用语句可确保即使在对象上调用方法时发生异常,也会调用 Dispose 。如果您想使用使用,请询问此问题“对象是否是一次性的?”。如果是使用是最佳选择。 您可能想尝试阅读更多内容。
答案 2 :(得分:0)
您不需要在ConvertTo<T>(IList<T> list)
内使用,但ConvertTo<T>(IList<T> list)
的调用者负责处理该DataTable。
using (var table = Test.ConvertTo(testList))
{
// do stuff with DataTable
}
编辑:从另一方面来看,这篇文章指出,在DataTable中,即使它实现了IDisposable,也没有任何东西可以处置:Should I Dispose() DataSet and DataTable?
答案 3 :(得分:0)
请注意:
using语句在对象上调用 Dispose 方法,并在调用Dispose后立即使对象本身超出范围。
和Dispose
会释放DataTable
使用的所有资源。
这样您就无法同时使用using Statement
并返回DataTable
个对象。
public static DataTable ConvertTo<T>(IList<T> list)
{
DataTable resultTable = CreateTable<T>();
using(DataTable table = CreateTable<T>())
{
....
resultTable = table;
}
// 'table' object disposed already
return resultTable ;
}