c# - tipos - Si ocurre una excepción dentro de una declaración using, ¿el objeto sigue siendo eliminado?
que tipos de excepciones existen en c# (4)
Si ocurre una excepción dentro de una declaración using, ¿el objeto sigue siendo eliminado?
La razón por la que pregunto es porque estoy tratando de decidir si poner una prueba atrapada alrededor de todo el bloque de código o dentro de la declaración de uso interno. Teniendo en cuenta que ciertas excepciones se vuelven a lanzar por diseño dentro del bloque catch.
using (SPSite spSite = new SPSite(url))
{
// Get the Web
using (SPWeb spWeb = spSite.OpenWeb())
{
// Exception occurs here
}
}
La instrucción using
provoca que se genere un patrón de dispose
completo y adecuado, por lo que la respuesta es sí.
Sí lo hace. Es como envolver tu código en una prueba final (y deshacerse finalmente).
Sí lo harán.
using(SPWeb spWeb = spSite.OpenWeb())
{
// Some Code
}
es equivalente a
{
SPWeb spWeb = spSite.OpenWeb();
try
{
// Some Code
}
finally
{
if (spWeb != null)
{
spWeb.Dispose();
}
}
}
Editar
Después de responder a esta pregunta, escribí una publicación más detallada acerca de la construcción IDisposable y Using en mi blog.
Sí. Una instrucción using
traduce aproximadamente en la siguiente construcción:
IDisposable x;
try
{
...
}
finally
{
x.Dispose();
}