Kann mir jemand sagen, Unterschied zwischen und throw ex
in Kürze? Ich habe gelesen, dass throw
frühere Ausnahmen speichert, diese Zeile nicht erhalten.
Kann ich das in einem kurzen Beispiel sehen?Unterschied zwischen werfen und werfen ex in C# .net
Antwort
Ja - throw
gibt die Ausnahme, die abgefangen wurde, erneut zurück und behält den Stack-Trace bei. throw ex
löst die gleiche Ausnahme aus, aber setzt den Stack-Trace auf diese Methode zurück.
Es sei denn, Sie wollenden Stack-Trace zurückgesetzt (das heißt öffentlichen Anrufer aus den internen Abläufen Ihrer Bibliothek schützen), throw
ist allgemein die bessere Wahl, da Sie sehen können, wo die Ausnahme entstanden.
Ich möchte auch erwähnen, dass ein "Pass-Through" catch-Block:
try
{
// do stuff
}
catch(Exception ex)
{
throw;
}
sinnlos. Es ist das exakt gleiche Verhalten, als ob es überhaupt keine try/catch
gäbe.
Es ist nicht sinnlos, wenn Sie vor dem Wurf eine Log-Anweisung setzen. So benutze ich es oft. – Evgeni
@Eugene Du hast Recht, aber vor dem Wurf habe ich nichts - das wollte ich illustrieren. –
Throw wird ursprüngliche Ausnahme erneut auslösen;
Mit der Option "ex" wird eine neue Ausnahme erstellt, sodass sich die Stack-Verfolgung ändert. In der Regel wenig Sinn macht, in der Regel sollten Sie entweder nur werfen, oder eine neue Ausnahme erstellen und werfen, dass zB
// not a great code, demo purposes only
try{
File.Read("blah");
}
catch(FileNotFoundException ex){
throw new ConfigFileNotFoundException("Oops", ex);
}
Ich habe dieses Muster, die "Neue Ausnahme auslösen", bei mehr als einer Gelegenheit verwendet, normalerweise nur dann, wenn ich durch vorhandenen Code in eine Ecke gemalt wurde. Wenn ich Zeit/Zugriff/Erlaubnis habe, * upstream * -Code zu ändern, werde ich versuchen, dies umzuformen. Allerdings habe ich dieses Muster gelegentlich auch im Greenfield-Code verwendet. –
- 1. Was ist der Unterschied zwischen werfen und werfen mit Arg gefangener Ausnahme?
- 2. C# Parallel.ForEach werfen indexOutOfBoundException
- 3. umdeuten werfen in c
- 4. C++ - Makrodefinition werfen Fehler
- 5. Eine NullPointerException in C++ werfen
- 6. Symfony2 und werfen Ausnahmefehler
- 7. API-Aufruf mit Net :: HTTP werfen Net :: HTTPBadResponse Fehler
- 8. C++ - Konstruktor Initialisierungsliste werfen Ausnahmen
- 9. werfen benutzerdefinierte Ausnahme Informationen sammeln und erneut werfen
- 10. Unterschied zwischen ASP.Net, C# .Net und VB.Net?
- 11. Laufzeitausnahme in Closable.close() werfen
- 12. C# JSON WebClient Anfrage werfen
- 13. Gibt es eine Entsprechung in T-SQL zu C# "werfen" Ausnahmen erneut werfen?
- 14. Bedingtes Exception werfen
- 15. Objective C Array init EXEC_BAD werfen
- 16. ApplicationClass.Documents.Open werfen System.InvalidCastException
- 17. Meteor Befehl werfen Fehler
- 18. java nicht angehakt werfen
- 19. ArgumentNullException in Konstruktor werfen?
- 20. C++ versuchen/werfen/fangen => Maschinencode
- 21. Unterschied zwischen der Verwendung behauptet und werfen AssetionError Ausnahme in Java
- 22. SceneKit - Beleuchtung und Schatten werfen
- 23. Glassfish werfen org.postgresql.xa.PGXAException
- 24. JavaDocs werfen IllegalArgumentException
- 25. Einen Fehler in node.js werfen
- 26. Was ist der Unterschied zwischen px, em und ex?
- 27. Eichhörnchen: UnityJDBC werfen ClassNotFoundException
- 28. Serialisierung Ausnahme zu werfen
- 29. kann Default-Konstruktoren werfen?
- 30. Eine Queue in Funktionsparameter werfen
http://stackoverflow.com/questions/730250/is-there-a-difference-between -throw-and-throw-ex – Random
'throw', ohne einen Parameter wird in einem' catch' Block verwendet, um eine Ausnahme erneut auszulösen, die den 'catch' verursacht hat. – Jodrell