问题就是,具体是什么时候释放资源?
DataTable dt;
using (dt = new DataTable())
{
    dt.Columns.Add("ID");
    DataRow dr = dt.NewRow();
    dr["ID"] = "name";
    dt.Rows.Add(dr);
}
int i = dt.Rows.Count;
这个i依然有值。

解决方案 »

  1.   

    对象Dispose后仍然可以访问到它。但是这么做是危险的和绝对不允许的。
      

  2.   

    出了using{},就没了,系统会自己处理的
      

  3.   

    using (dt = new DataTable())
    {} <----到了这个括号就会调用 using里面那个对象的IDispose接口的Dispose方法。其实是只要出using的作用域就会调用Dispose,包括异常。这并不是真正的释放,而是调用Dispose而已。
      

  4.   

    DataTable一般无需using,执行它的Dispose方法后,仍然可以使用它,但不推荐这样做。真正释放资源的时刻是不确定的,由垃圾收集器自动释放。
      

  5.   

    using 所包含的对象必须实现了IDisposable接口,很明显DataTable 没实现
    等价于
    try
    {
       //obj操作
    }
    finally
    {
      obj.Dispose();
    }
      

  6.   

    我这里用DataTable只是举个例子。
    我今天在写代码的时候用到了IDbCommand对象
    就是在using后面的括号里实例化的。
    如下:
    using(实例化SqlCommand)
    {
    }
    using(datareader= cmd.ExecuteReader())
    {
    }
    Sql是没有问题的,但是我又写了个Access的
    using(实例化OleDbCommand)
    {
    }
    using(datareader= cmd.ExecuteReader())
    {
    }
    此时就报错,说缺少connection属性,但是实际上我在第一个using里面已经给cmd的connection属性赋值了的
    于是我就删掉了using,就没问题了
      

  7.   


    无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。