2012-02-22 25 views
224

¿Es posible hacer que este código sea un poco más compacto al declarar de alguna manera las 2 variables dentro del mismo bloque de uso?usando instrucción con múltiples variables

using (var sr = new StringReader(content)) 
{ 
    using (var xtr = new XmlTextReader(sr)) 
    { 
     obj = XmlSerializer.Deserialize(xtr) as TModel; 
    } 
} 
+5

No utilice 'nueva XMLTextReader()'. Use 'XmlReader.Create()' –

+1

@JohnSaunders ¿por qué? –

+10

'new XmlTextReader()' ha quedado en desuso desde .NET 2.0. Al usar 'XmlReader.Create()', obtendrás la mejor clase derivada 'XmlReader' posible, en contraposición a la única clase' XmlTextReader'. –

Respuesta

417

La forma más aceptada es sólo para la cadena de las declaraciones:

using (var sr = new StringReader(content)) 
using (var xtr = new XmlTextReader(sr)) 
{ 
    obj = XmlSerializer.Deserialize(xtr) as TModel; 
} 

Tenga en cuenta que el IDE también apoyará esta sangría, es decir, que intencionadamente no tratará de sangrar la segunda declaración using.

+0

¿Utiliza esto la regla de un solo liner sin llaves para extender el alcance de las declaraciones entre sí, o realmente compilar en algún tipo de cadena? – ssube

+0

@peachykeen Es un bloque anidado pero creo que en este caso esto no se puede distinguir de una cadena debido a la semántica de 'usar' de todos modos. O bien, no entiendo lo que quiere decir con cadena: tenga en cuenta que para que 'using' funcione correctamente, cada recurso requiere su propio bloque' try' ... 'finally'. –

+0

No veo diferencia entre este código y el código en la pregunta. –

96

¡Lo siguiente solo funciona para instancias del mismo tipo! Gracias por los comentarios.

Este código de muestra es de MSDN:

using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f)) 
{ 
    // Use font3 and font4. 
} 
+23

Esto solo funciona cuando las variables son del mismo tipo. –

+1

que solo parece funcionar si ambos objetos son del mismo tipo –

+3

¿Luego declara las variables como IDisposable y las envía luego? –

Cuestiones relacionadas