AKTUALISIERT: unter der Annahme C# 6, sind die Chancen, dass Ihr Fall kann als Ausnahmefilter ausgedrückt werden. Dies ist der ideale Ansatz aus Sicht der Leistung Ihre Anforderung unter der Annahme, kann in Bezug auf mich, zum Beispiel ausgedrückt werden:
try
{
}
catch (Web2PDFException ex) when (ex.Code == 52)
{
}
Unter der Annahme, C# < 6, die am effizientesten ist, eine bestimmte Exception
Art zu fangen und zu tun Umgang darauf bezogen. Jede catch-all Handhabung kann
try
{
}
catch (Web2PDFException ex)
{
}
oder
try
{
}
catch (Web2PDFException ex)
{
}
catch (Exception ex)
{
}
oder separat durchgeführt werden (wenn Sie einen allgemeinen Handler schreiben müssen - die in der Regel eine schlechte Idee ist, aber wenn Sie sicher sind, ist es am besten für Sie, sind Sie sicher):
if(err is Web2PDFException)
{
}
oder (in bestimmten Fällen, wenn Sie etwas komplexere Art Hierarchie Sachen tun müssen, die mit is
)
ausgedrückt werden kann nicht
if(err.GetType().IsAssignableFrom(typeof(Web2PDFException)))
{
}
oder wechseln Sie zu VB.NET oder F # und verwenden
is
oder
Type.IsAssignableFrom
in Ausnahmefilter
if (err Web2PDFException ist) ist, dass ich :) – Tomas
nutzen zu können, die "erforderlich ist "operator er muss nicht auf VB.NET wechseln –
@BeowulfOF: Ich weiß, aber wenn er nur versucht, Filterung basierend auf Typen zu tun - dh eine Art von bedingten Fang usw., kann es nützlich sein, ein ist * in einem Ausnahme-Filter statt in einem catch-Block * - es könnte eine Vorgehensweise sein, die funktioniert. Mein erster Vorschlag (und es ist immer noch in der Antwort) ist ein im Catch-Block. Fazit ist, dass, wenn man bedenkt, dass ein "ist" normalerweise ein schlechter Geruch ist, wir genauso gut eine Liste mit möglichen Lösungen haben und Tomas auswählen können, was am besten zu seinem spezifischen Kontext passt. Aber ja, es ist unwahrscheinlich. –