Ловля исключений с помощью «поймать, когда»

Я столкнулся с этой новой функцией в C #, которая позволяет обработчику catch выполняться при выполнении определенного условия.

int i = 0;
try
{
    throw new ArgumentNullException(nameof(i));
}
catch (ArgumentNullException e)
when (i == 1)
{
    Console.WriteLine("Caught Argument Null Exception");
}

Я пытаюсь понять, когда это может быть полезным.

Один сценарий может быть примерно таким:

try
{
    DatabaseUpdate()
}
catch (SQLException e)
when (driver == "MySQL")
{
    //MySQL specific error handling and wrapping up the exception
}
catch (SQLException e)
when (driver == "Oracle")
{
    //Oracle specific error handling and wrapping up of exception
}
..

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

Другой сценарий, который я могу придумать, это что-то вроде:

try
{
    SomeOperation();
}
catch(SomeException e)
when (Condition == true)
{
    //some specific error handling that this layer can handle
}
catch (Exception e) //catchall
{
    throw;
}

Опять же, это то, что я могу сделать, как:

try
{
    SomeOperation();
}
catch(SomeException e)
{
    if (condition == true)
    {
        //some specific error handling that this layer can handle
    }
    else
        throw;
}

Делает ли использование функции «catch, when» обработку исключений быстрее, потому что обработчик пропускается как таковой, и раскрутка стека может произойти намного раньше, чем по сравнению с обработкой конкретных случаев использования внутри обработчика? Существуют ли какие-либо конкретные варианты использования, которые лучше соответствуют этой функции, которые люди могут использовать в качестве хорошей практики?

Ответы на вопрос(3)

Ваш ответ на вопрос