Почему 'использование' не имеет блока выгоды?

Быстрый способ найти шаблонные файлы можно создать и изменить для представления в Представлениях 2.0, к:

  1. Редактирование представление
  2. Выбор стиль (например, страница, блок, значение по умолчанию)
  3. В 'Основных Настройках' блок нажимает на 'Theme: Information' для наблюдения всех различных шаблонов, которые можно изменить.
10
задан SwDevMan81 12 November 2009 в 19:55
поделиться

7 ответов

У меня были места, где это было бы полезно. Но чаще всего, когда я хочу это сделать, оказывается, что проблема в моем дизайне; Я пытаюсь обработать исключение не в том месте.

Вместо этого мне нужно позволить ему перейти на следующий уровень - обработать его в функции, которая вызвала этот код, а не прямо здесь.

5
ответ дан 3 December 2019 в 13:19
поделиться

Потому что вы «прячете» дополнительные функции внутри несвязанного ключевого слова.

Однако вы всегда можете написать это так

using (...) try
{
}
catch (...)
{
}

И таким образом линия представляет ваши намерения - использование заявление, которое также является попыткой

27
ответ дан 3 December 2019 в 13:19
поделиться

Интересная идея, но она может сбить с толку:

 using (SqlConnection connection = new SqlConnection())
 using (SqlCommand cmd = new SqlCommand())
 {
     connection.Open();
 }
 catch(Exception ex)
 {
     // Is connection valid? Is cmd valid?  how would you tell?
     // if the ctor of either throw do I get here?
 }
2
ответ дан 3 December 2019 в 13:19
поделиться

, используя Не имеет ничего общего с обработкой ошибок. Это сокращение от «вызывать Dispose, когда вы покидаете этот блок». Ваш второй пример кода вполне приемлем ... зачем возиться с тем, что работает?

12
ответ дан 3 December 2019 в 13:19
поделиться

На мой взгляд, вы смешиваете проблемы. Управление ресурсами (т.е. избавление от объектов) полностью отделено от обработки исключений. Сопоставление один-к-одному, которое вы описываете в своем вопросе, - это особый случай. Обычно обработка исключений не происходит в том же месте, где заканчивается область действия using. Или у вас может быть несколько областей try-catch внутри блока using. Или ...

2
ответ дан 3 December 2019 в 13:19
поделиться

Блок using - это просто синтаксический сахар для блока try-finally. Если вам нужно предложение catch, просто используйте try-catch-finally:

SqlConnection connection;
try 
{
    connection = new SqlConnection();
    connection.Open();
}
catch(Exception ex)
{
    // handle
}
finally 
{
    if (connection != null)
    {
        connection.Dispose();
    }
}

Да, это больше кода, чем ваше теоретическое "using-catch"; Я считаю, что разработчики языка не считали это очень важным, и я не могу сказать, что когда-либо чувствовал его потерю.

8
ответ дан 3 December 2019 в 13:19
поделиться

Я рекомендую вам использовать пример №1 и №2 вместе. Причина в том, что ваш оператор using может, например, прочитать файл и вызвать исключение (например, файл не найден). Если вы его не поймаете, значит, у вас необработанное исключение. Помещение блока try catch внутри блока using будет улавливать только исключения, возникающие после выполнения оператора using. ИМХО, лучше всего сочетается ваш пример один и два.

0
ответ дан 3 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: