Frage

In VB.NET ich oft Catch…When:

Try
    …
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
    …
End Try

Gibt es eine C # entspricht Catch…When?

Ich mag nicht in einem if zu mit einer catch Aussage greifen, wenn möglich.

War es hilfreich?

Lösung

Diese Funktionalität für C # angekündigt 6. Es ist nun möglich, schreiben

try { … }
catch (MyException e) when (myfilter(e))
{
    …
}

Sie können die Vorschau von 2015 nun dies, um zu überprüfen, oder für den offiziellen Release warten.

Andere Tipps

Es gibt kein Äquivalent in C # Catch…When. Sie werden wirklich in Ihrem if auf eine catch Anweisung zurückgreifen müssen, dann erneut auslösen, wenn Ihr Zustand nicht erfüllt ist:

try
{
    …
}
catch (ArgumentNullException e)
{
    if ("SAMPLES" == e.ParamName.ToUpper())
    {
        … // handle exception
    }
    else
    {
        throw;  // condition not fulfilled, let someone else handle the exception
    } 
}

Das wird die gleiche Semantik wie die VB fangen, wenn Ausdruck nicht neu erstellen. Es gibt einen entscheidenden Unterschied. Die VB Wenn die Expression ausgeführt wird, bevor der Stapel Abwickelstation auftritt. Wenn Sie den Stapel an der Stelle eines als Filter zu untersuchen, würden Sie tatsächlich den Rahmen sehen, wo die Ausnahme ausgelöst wurde.

Mit ein, wenn in dem catch-Block unterschiedlich ist, weil der catch-Block ausführt, nachdem der Stapel abgewickelt wird. Dies ist besonders wichtig, wenn es die Fehlerbehandlung kommt. Im VB Szenario haben Sie die Möglichkeit, mit einem Stack-Trace einschließlich dem Scheitern des Absturzes. Es ist nicht möglich, dass das Verhalten in C # zu erhalten.

EDIT:

Schrieb einen detaillierter Blog-Post zu dem Thema.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top