当有多个using语句时,它们会按顺序执行吗?

时间:2010-11-24 06:29:26

标签: c# dispose using using-statement

例如

  using (Stream ftpStream = ftpResponse.GetResponseStream())       // a             
  using (FileStream localFileStream = (new FileInfo(localFilePath)).Create()) // b
  {
                 ........do something
  }

这两个语句a和b会按照我的顺序执行吗? 并以相同的顺序排列??

由于

2 个答案:

答案 0 :(得分:10)

它们将按文字顺序执行,并按反向顺序处理 - 因此localFileSream将首先处理,然后ftpStream

基本上你的代码相当于:

using (Stream ftpStream = ...)
{
    using (FileStream localFileStream = ...)
    {
        // localFileStream will be disposed when leaving this block
    }
    // ftpStream will be disposed when leaving this block
}

它远不止于此。您的代码等效(不同类型的localFileStream除外):

using (Stream ftpStream = ..., localFileStream = ...)
{
    ...
}

答案 1 :(得分:2)

是。此语法只是嵌套using语句的快捷方式或替代方法。您所做的只是省略第一个using语句中的括号。它相当于:

using (Stream ftpStream = ftpResponse.GetResponseStream())
{
    using (FileStream localFileStream = (new FileInfo(localFilePath)).Create())
    {
        //insert your code here
    }
}