66 votes

Qu'est-ce que "jeter;" par lui-même?

Dupliquer possible:
différence entre lancer et lancer nouvelle Exception ()

Quel serait le point d'avoir juste

 catch (Exception)
{
    throw;
}
 

Qu'est-ce que cela fait?

98voto

Matt Hamilton Points 98268

Par lui-même, l' throw mot-clé il suffit de le re-soulève l'exception interceptée par l' catch énoncé ci-dessus. Ceci est pratique si vous voulez faire un peu rudimentaire gestion de l'exception (peut-être une compensation de l'action comme de l'annulation d'une transaction) et ensuite renvoyer l'exception à la méthode appelante.

Cette méthode a un avantage significatif par rapport à la capture de l'exception dans une variable et de lancer de cette instance: Il conserve l'original de la pile d'appel. Si vous catch (Exception ex) et ensuite jeter ex, votre pile d'appel ne commencera à l'instruction throw et vous perdez de la méthode/de la ligne de l'erreur d'origine.

13voto

dcp Points 26928

Parfois, vous voudrez peut-être faire quelque chose comme ceci:

 try
{
    // do some stuff that could cause SomeCustomException to happen, as 
    // well as other exceptions
}
catch (SomeCustomException)
{
    // this is here so we don't double wrap the exception
    throw;
}
catch (Exception e)
{
    throw new SomeCustomException("An error occurred saving the widget", e);
}
 

3voto

ho1 Points 31752

La seule raison pour laquelle je peux penser est si vous voulez placer un point d'arrêt là-bas pendant le débogage.
C'est aussi le code par défaut généré par certains outils, je pense.

3voto

Boris Callens Points 17660

Il renvoie exactement la même erreur, vous ne gagnez rien.
Parfois, vous pouvez utiliser la méthode catch pour effectuer une journalisation ou autre chose sans interrompre votre exception de la manière suivante:

 catch (Exception) {
  myLogger.Log(LogLevels.Exception, "oh noes!")
  throw; 
}
 

J'ai d'abord pensé à tort que cela détendrait votre pile, mais ce ne serait le cas que si vous procédiez comme suit:

 catch (Exception err) {
  throw err; 
}
 

2voto

Rajesh Points 1460

Relancez simplement l'exception actuelle, et cette exception conservera son "source" et la trace de la pile.

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