Рекомендуется использовать try {} catch() {} внутри оператора using, если вы хотите поймать исключение, созданное кодом внутри блока использования. Теперь рассмотрим следующие два примера - это объясняет, почему блок try-catch внутри оператора using является хорошей практикой.
Пример 1
try{
using(SomeObject so = new SomeObject){
// Perform some tasks
}
}catch(SomeException objSomeException){
// Perform some actions, if exception occurs
}
Пример 2
using(SomeObject so = new SomeObject){
try{
// Perform some tasks
}catch(SomeException objSomeException){
// Perform some actions, if exception occurs
}
}
Теперь, если исключение происходит при выполнении некоторых задач внутри с помощью заявления, оба примера иметь такие же результаты. Простой ответ - нет, причина ???
Если исключение встречается в примере 1, оно захватывается блоком catch, не доходя до конца используемого блока. Следовательно, someObject в примере 1 не будет правильно настроен. Даже если CLR щедрый (на который вы не должны рассчитывать) - память, используемая someObject в примере 1, не будет восстановлена (или максимум она будет в коллекции GC Generation 2 GC).
Если в случае примера 2 блок catch находится внутри оператора using. Это означает, что выполнение достигнет конца используемого блока. Таким образом, ваш объект будет удален, и вам не придется беспокоиться об утечке памяти (порча,
Surround с блоком TryCatch. – SimpleVar
С 'try/catch'. – Jon
Не могли бы вы уточнить свой вопрос? конечно, что вы просите здесь. – Tejs