Есть ли ситуация, когда нужно использовать пустой блок catch?

Возможные дубликаты:
Почему пустые блоки блокировки плохой идеей?
Есть ли какие-либо обоснованные причины когда-либо игнорировать пойманное исключение

Знаете ли вы какие-либо ситуации, когда пустой блок catch не является абсолютным злом?

try
{
    ...
    // What and When?
    ...
}
catch { }

Ответ 1

На это много вопросов, попробуйте посмотреть:

Почему пустые блоки catch блокируют плохую идею?

Из этого сообщения принят ответ:

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

Это программный эквивалент нанесения черной ленты на сигнальную лампу двигателя.

Ответ 2

Взгляните на this, он в основном разбивает вид исключений, с которыми вы могли столкнуться, в четыре категории, ни один из которых не должен обрабатываться пустой блок catch.

Ответ 3

Я бы сказал, что вы должны хотя бы предоставить какой-то комментарий или зарегистрированное сообщение, указывающее, что то, что вы положили в try {}, выбрало исключение, и именно поэтому вы ничего не делаете.

Ответ 4

Я использовал его для некоторых самописных библиотек, где мне нужна какая-то функция bool TrySomething(out object) или object TrySomething(), где базовый вызов не предоставляет какой-либо другой механизм в качестве исключения. В этом случае я использую пустой блок catch и возвращаю false или null (в зависимости от сигнатуры функции).

Пример для доказательства пустого блока catch

public bool TrySomething(out object destination)
{
    try
    {
        destination = DoSomething();
        return true;
    }
    catch
    {}

    return false;
}

Ответ 5

Аксиома:

Пустые блоки блокировки являются абсолютным злом

Не пытайтесь найти способ обойти это. Просто пытаясь найти случаи, когда они не являются абсолютным злом, вы тратите драгоценные мозговые циклы. Не пытайтесь найти здесь образец, думая: "Хм, я должен положить здесь пустой блок catch?"

Если вы наткнетесь на пустой блок catch в чей-то код, вы просто наткнулись на технический долг. Почини это. Даже просто добавив один оператор регистрации в пустой блок catch, вы сделаете этот мир лучшим местом.