Fängt man eine Exception und wirft sie dann mit throw(ex) weiter, dann zerstört man sich den Callstack und tötet damit wichtige Informationen - das sollte sich mitlerweile herumgesprochen haben.
Nun gibt es aber sehr wohl Gründe eine Exception zu fangen und auch wieder zu werfen - mal mit einer eigenen Exception, mal mit der Original-Exception und mal direkt. In welchen Fällen macht man aber was? Ich habe das in einem älteren Beitrag schonmal geschrieben, bin aber heute über einen Text der Patterns&Practices Group gestolpert der das wesentliche ausführlicher erklärt: Exception Managment Architecture - sehr lesenswert.