59 votes

Si une exception se produit dans une instruction using, l'objet est-il toujours supprimé ?

Si une exception se produit dans une instruction using, l'objet est-il toujours supprimé ?

La raison pour laquelle je pose la question est que j'essaie de décider s'il faut mettre un essai autour de l'ensemble du bloc de code ou dans l'instruction using interne. En gardant à l'esprit que certaines exceptions sont rejetées par conception dans le bloc catch.

 using (SPSite spSite = new SPSite(url))
{
   // Get the Web
   using (SPWeb spWeb = spSite.OpenWeb())
   {
       // Exception occurs here
   }
}

64voto

Anders Abel Points 36203

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();
    }
  }
}

Éditer

Après avoir répondu à cette question, j'ai écrit un article plus détaillé sur la construction IDisposable et Using dans mon blog.

9voto

spender Points 51307

Oui. Une using traduit approximativement par la construction suivante :

 IDisposable x;
try
{
    ...
}
finally
{
    x.Dispose();
}

6voto

Phil Lambert Points 679

Oui. C'est comme envelopper votre code dans un try-finally (et disposer dans le dernier).

2voto

Oded Points 271275

Le using déclaration provoque une complète et appropriée dispose tendance à générer, donc la réponse est oui.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X