Ausnahmen mit "catch, when" abfangen

Ich bin auf diese neue Funktion in C # gestoßen, mit der ein Catch-Handler ausgeführt werden kann, wenn eine bestimmte Bedingung erfüllt ist.

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

Ich versuche zu verstehen, wann dies jemals nützlich sein kann.

in Szenario könnte etwa so aussehen:

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
}
..

, aber das ist wieder etwas, das ich innerhalb des gleichen Handlers tun und abhängig vom Typ des Treibers an verschiedene Methoden delegieren kann. Erleichtert dies das Verständnis des Codes? Wohl nein.

Ein anderes Szenario, das ich mir vorstellen kann, ist etwa:

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

Again das ist etwas, das ich tun kann, wie:

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

Wird bei Verwendung der Funktion "catch, when" die Ausnahmebehandlung beschleunigt, da der Handler als solcher übersprungen wird und das Abwickeln des Stapels viel früher erfolgen kann als bei der Behandlung der spezifischen Anwendungsfälle innerhalb des Handlers? Gibt es spezielle Anwendungsfälle, die besser zu dieser Funktion passen und die von den Mitarbeitern als bewährte Methode übernommen werden können?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage