Es empfiehlt sich, try {} catch() {} in der using-Anweisung zu verwenden, wenn Sie eine Ausnahme abfangen wollen, die vom Code im using-Block ausgelöst wird. Betrachten Sie nun die folgenden zwei Beispiele - das erklärt, warum der try-catch-Block in der using-Anweisung eine gute Übung ist.
Beispiel 1
try{
using(SomeObject so = new SomeObject){
// Perform some tasks
}
}catch(SomeException objSomeException){
// Perform some actions, if exception occurs
}
Beispiel 2
using(SomeObject so = new SomeObject){
try{
// Perform some tasks
}catch(SomeException objSomeException){
// Perform some actions, if exception occurs
}
}
Nun, wenn eine Ausnahme während auftritt einige Aufgaben innerhalb der using-Anweisung durchgeführt wird, werden beide haben beispielsweise die gleiche Ergebnisse. Die einfache Antwort ist Nein, Grund ???
Wenn in Beispiel 1 eine Ausnahme auftritt, wird sie vom catch-Block abgefangen - ohne das Ende des using-Blocks zu erreichen. Daher wird das ameObject in Beispiel 1 nicht ordnungsgemäß entsorgt. Selbst wenn CLR großzügig ist (auf das Sie nicht zählen sollten) - der von dem someObject in Beispiel 1 verwendete Speicher wird nicht wiederhergestellt (oder wird maximal in der GC-Sammlung der Generation 2 landen).
Im Fall von Beispiel 2 befindet sich der catch-Block in der using-Anweisung. Das bedeutet, dass die Ausführung das Ende des Verwendungsblocks erreicht. Daher wird Ihr Objekt entsorgt und Sie müssen sich keine Gedanken über das Speicherleck machen (Verderb,
Surround mit einem TryCatch-Block – SimpleVar
Mit "versuchen/fangen" – Jon
Könnten Sie Ihre Frage klären? Ich bin nicht sicher, was du hier verlangst. – Tejs