Когда есть оператор multi using, они будут выполнены по порядку? - PullRequest
2 голосов
/ 24 ноября 2010

например

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

будут ли два оператора a и b выполняться в порядке, который я поставил?и выкладывать в том же порядке ??

Спасибо

Ответы [ 2 ]

10 голосов
/ 24 ноября 2010

Они будут выполняться в текстовом порядке и будут расположены в в обратном порядке - поэтому сначала будет располагаться 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 = ...)
{
    ...
}
2 голосов
/ 24 ноября 2010

Да. Этот синтаксис представляет собой просто ярлык или альтернативный способ вложения using операторов.Все, что вы делаете, это опускаете скобки в первом операторе using.Это эквивалентно:

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