using (FileStream fileStream = File.OpenWrite(Opfd.FileName))
{
   using (StreamWriter streamwriter = new StreamWriter(fileStream))
   {
    }
}

StreamWriter streamwriter = new StreamWriter(Opfd.FileName)
执行结果一样 
问下有区别吗?

解决方案 »

  1.   

    一般情况下作用差不多,但是前者更好。后者streamwriter会在对象退出作用域后才执行despose方法,并且关闭文件。这在当streamweiter是一个全局变量的时候,长时间锁定文件,造成一些你不期望的后果。你应该在你用完对象后主动去释放。
      

  2.   

    StreamWriter streamwriter = new StreamWriter(Opfd.FileName)
    try
    {
    }
    finally
    {
    streamwriter.Dispose();
    }
      

  3.   

    using(new对象A,并且A占用了各种资源)
    {
      ...//执行语句
    }//在这里会把A所占有的资源全部释放,但是A不会被Dispose
      

  4.   


    不会吧,用using不就是为了Dispose A吗
      

  5.   

    用using块就是为了dispose啊大哥 因为GC是无法释放非托管资源的 虽然在析构函数里面也可以手动释放非托管资源 但是那样子是会造成对象回收被延迟 所以我们要实现idispose接口 然后在using块里面写代码
      

  6.   

      
    我经常犯的一些错误 using (FileStream fileStream = File.OpenWrite(Opfd.FileName))
                {
                    using (StreamWriter streamwriter = new StreamWriter(fileStream))
                    {
                        streamwriter.Close();
                    }                fileStream.Close();
                }
      

  7.   

    也可以这样写:using(StreamWriter streamwriter = new StreamWriter(Opfd.FileName))
    {
    ...
    }这样会帮你关闭文件,也比较简洁,不过不好控制文件打开方式,
      

  8.   

    哈哈,释放资源 不就是dispose么。这孩子
      

  9.   


    好吧我错了
    原来是以为using会把A占用的数据库连接、文件流等资源释放,自己不会Dispose刚才试验了一下  A肯定会被Dispose的