C # entspricht VB.NET Catch ... Wenn
-
05-07-2019 - |
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.
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.