C# Language Múltiples declaraciones usando un bloque


Ejemplo

Es posible utilizar múltiples anidadas using declaraciones sin agregados múltiples niveles de tirantes anidados. Por ejemplo:

using (var input = File.OpenRead("input.txt"))
{
    using (var output = File.OpenWrite("output.txt"))
    {
        input.CopyTo(output);
    } // output is disposed here
} // input is disposed here

Una alternativa es escribir:

using (var input = File.OpenRead("input.txt"))
using (var output = File.OpenWrite("output.txt"))
{
    input.CopyTo(output);
} // output and then input are disposed here

Que es exactamente equivalente al primer ejemplo.

Nota: las declaraciones de using anidadas pueden activar la regla de análisis de código de Microsoft CS2002 (consulte esta respuesta para obtener una aclaración) y generar una advertencia. Como se explica en la respuesta vinculada, generalmente es seguro anidar using declaraciones.

Cuando los tipos dentro de la declaración de using son del mismo tipo, puede delimitarlos con comas y especificar el tipo solo una vez (aunque esto no es común):

using (FileStream file = File.Open("MyFile.txt"), file2 = File.Open("MyFile2.txt"))
{
}

Esto también se puede utilizar cuando los tipos tienen una jerarquía compartida:

using (Stream file = File.Open("MyFile.txt"), data = new MemoryStream())
{
}

La palabra clave var no se puede utilizar en el ejemplo anterior. Se produciría un error de compilación. Incluso la declaración separada por comas no funcionará cuando las variables declaradas tengan tipos de diferentes jerarquías.