C# 在DataTable中使用语句

C# 在DataTable中使用语句,c#,asp.net,c#-4.0,using,C#,Asp.net,C# 4.0,Using,在我下面的函数中…我想返回DataTable 我应该转换下一行吗 DataTable=CreateTable() 追随 using(DataTable table = CreateTable<T>()) { } 使用(DataTable=CreateTable()) { } 作用 公共静态数据表转换器(IList列表) { DataTable=CreateTable(); int iColCount=table.Columns.Count; 对于(int j=0;j

在我下面的函数中…我想返回DataTable

我应该转换下一行吗

DataTable=CreateTable()

追随

using(DataTable table = CreateTable<T>())
{
}
使用(DataTable=CreateTable())
{
}
作用
公共静态数据表转换器(IList列表)
{
DataTable=CreateTable();
int iColCount=table.Columns.Count;
对于(int j=0;j
using语句确保调用Dispose,即使在对对象调用方法时发生异常。如果你想使用使用问这个问题“这个对象是一次性的吗?”。如果是,则使用是最佳选择。 你可能想多看看这方面的内容

你为什么要这样做

using (obj)
{
    // Do something
}
基本上与:

try
{
    // Do something
}
finally
{
    obj.Dispose();
}

关键是一旦不再需要对象,就释放对象使用的资源。在本例中,您将数据表返回给调用函数,因此仍然需要它。因此,没有理由使用
语句将函数封装在
语句中。

您不需要使用inside
ConvertTo(IList列表)
,但是
ConvertTo(IList列表)
的调用方负责处理该数据表

using (var table = Test.ConvertTo(testList)) 
{
   // do stuff with DataTable
}
编辑:另一方面,有一篇文章指出,在DataTable中,即使实现了IDisposable,也没有什么可处理的:

注意:

using语句调用对象上的Dispose方法,并在调用Dispose时使对象本身超出范围

Dispose
释放
DataTable
使用的所有资源

这样您就不能同时使用和返回
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 ;
}
公共静态数据表转换器(IList列表)
{
DataTable resultTable=CreateTable();
使用(DataTable=CreateTable())
{
....
结果=表格;
}
//“表”对象已被释放
返回结果;
}

返回已处理的对象有意义吗?我也想返回该对象。它应该是在处理之前还是处理之后返回?我想说的是:您不应该返回已处理的对象。所以,如果您要返回它,不要处理它。您的代码将在Finally块中处理。请你详细解释一下好吗?我的代码只是对
使用的功能的翻译。我试图解释
using
关键字等同于在finally块内调用
Dispose
方法。现在,由于要返回对象,因此不能调用
Dispose
方法。因此,您也不能使用
using
关键字。
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 ;
}