Filed Under (C# code) by Christiaan van Bergen on April-10-2007

Okay, ik ga er vanuit dat we allemaal nette code schrijven en op de juiste plekken try/catch blokken schrijven. In veel gevallen is het echter zo dat in het catch-deel de gevangen Exception weer opnieuw gegooid wordt. Zoals bijvoorbeeld:

try{
  //doe iets dat wellicht fout gaat
}
catch(Exception ex){
  //doe iets moois
  throw ex;
}

Je verwacht nu dat de Exception ex die je gevangen hebt, wordt gegooid. Niets is minder waar. De Exception ex wordt onder water aangepast. De stacktrace wordt opnieuw opgebouwd, met als gevolg dat je niet meer precies het regelnummer krijgt van de code die fout is gegaan, maar het regelnummer waar je de Exception hebt gegooid. Wanneer je de Exception ongewijzigd wil gooien gebruik dan :

try{
  //doe iets dat wellicht fout gaat
}
catch(Exception ex){
  //doe iets moois
  throw;
}

Het eenvoudig weglaten van de ‘ex’ na de throw zorgt ervoor dat het Exception object ongewijzigd blijft.



Comments
Dennis Vroegop on April 27th, 2007 at 12:40 pm #

Ik merk dat heel veel mensen dit niet doorhebben. Ze rethrowen de exception en merken dan niet dat ze info kwijt raken.
Voor een gedetailleerder verhaal over dit fenomeen:
http://www.dotned.nl/blogs/dennis_blog/archive/2006/03/31/118.aspx

You must be logged in to post a comment.