Si une exception se produit dans une instruction using, l'objet est-il toujours supprimé?
La raison pour laquelle je pose la question est parce que j'essaie de décider de mettre un essai coincé dans tout le bloc de code ou dans l'instruction using interne. Gardant à l'esprit que certaines exceptions sont rejetées par conception dans le bloc de capture.
using (SPSite spSite = new SPSite(url))
{
// Get the Web
using (SPWeb spWeb = spSite.OpenWeb())
{
// Exception occurs here
}
}
Oui, il le feront.
using(SPWeb spWeb = spSite.OpenWeb())
{
// Some Code
}
est équivalent à
{
SPWeb spWeb = spSite.OpenWeb();
try
{
// Some Code
}
finally
{
if (spWeb != null)
{
spWeb.Dispose();
}
}
}
Après avoir répondu à cette question, j'ai écrit un article plus approfondi sur la construction IDisposable and Using dans mon blog.
Oui. Une instruction using
se traduit approximativement par la construction suivante:
IDisposable x;
try
{
...
}
finally
{
x.Dispose();
}
Oui. C'est comme encapsuler votre code dans un essai final (et éliminer dans le enfin).
L'instruction using
provoque la génération d'un modèle dispose
complet et approprié, donc la réponse est oui.