Куда мне положить try/catch с помощью оператора using?
Возможный дубликат:
попробуйте / поймать + используя правильный синтаксис
я бы хотел try/catch
следующие:
//write to file
using (StreamWriter sw = File.AppendText(filePath))
{
sw.WriteLine(message);
}
Я положил try/catch
блоки внутри using
Скажите или, вокруг него? Или оба?
3 ответа
Если вашему оператору catch нужно получить доступ к переменной, объявленной в операторе using, то внутри - ваш единственный вариант.
Если вашему оператору catch требуется объект, на который ссылается использование, перед его удалением, то внутри - ваш единственный вариант.
Если ваш оператор catch выполняет действие неизвестной продолжительности, например, выводит сообщение пользователю, и вы хотели бы распоряжаться своими ресурсами до того, как это произойдет, тогда лучшим вариантом будет внешний.
Всякий раз, когда у меня есть сценарий, похожий на этот, блок try-catch обычно находится в другом методе дальше по стеку вызовов от использования. Для метода нетипично знать, как обрабатывать исключения, возникающие внутри него, вот так.
Таким образом, моя общая рекомендация - снаружи - далеко снаружи.
private void saveButton_Click(object sender, EventArgs args)
{
try
{
SaveFile(myFile); // The using statement will appear somewhere in here.
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
}
Я полагаю, это предпочтительный способ:
try
{
using (StreamWriter sw = File.AppendText(filePath))
{
sw.WriteLine(message);
}
}
catch(Exception ex)
{
// Handle exception
}
Если вам все равно нужен блок try/catch, тогда оператор using не будет вам выгоден. Просто бросьте это и сделайте это вместо этого:
StreamWriter sw = null;
try
{
sw = File.AppendText(filePath);
sw.WriteLine(message);
}
catch(Exception)
{
}
finally
{
if (sw != null)
sw.Dispose();
}