Manchmal ist der Ausnahmetyp eindeutig genug, um das genaue Problem anzuzeigen, z. B. eine ArgumentOutOfRangeException . Zu anderen Zeiten ist die Ausnahme allgemeiner und könnte aus verschiedenen Gründen ausgelöst werden. In diesem Szenario scheint die einzige zusätzliche Information in der Ausnahmebedingungsnachricht gefunden zu werden.
In meinem aktuellen Fall erhalte ich eine CommunicationException, die die Fehlermeldung ausgibt:
Das maximale Nachrichtengrößenkontingent für eingehende Nachrichten (65536) wurde überschritten.
Da mehrere verschiedene Fehler über die CommunicationException ausgelöst werden können, ist es eine schlechte Übung, die meldung -Eigenschaft zu verwenden, um die Ursache zu ermitteln, beispielsweise:
%Vor%Werden diese Nachrichten auf allen Systemen konstant und zuverlässig sein? Gibt es noch andere Überlegungen, wie zum Beispiel die Lokalisierung?
Fazit:
Mein Szenario mit der 'CommunicationException' war ein schlechtes Beispiel, da ich später erkannte, dass in der InnerException-Eigenschaft eine QuotaExceededException vorhanden war. Dank der Antworten wusste ich, nach irgendwelchen Daten zu suchen, die in der Ausnahme existierten, um die genaue Ursache anzuzeigen. In diesem Fall war es die InnerException-Eigenschaft.
In Bezug auf die Frage, ob die Nachrichteneigenschaft zur Bestimmung der Ursache verwendet werden sollte, scheint es der allgemeine Konsens zu sein, dass sie vermieden werden sollte, wenn es keine Alternative gibt. Der Wert der Nachrichteneigenschaft kann aufgrund von Lokalisierung nicht über unterschiedliche Systeme hinweg konstant bleiben.
IMHO Magic String-Lösungen sollten immer ein letzter Ausweg sein.
Sind Sie sicher, dass Sie den Fehlertyp nicht aus den zusätzlichen Eigenschaften des CommunicationException-Objekts lösen können:
.. oder erhalten Sie eine InnerException, die nützlicher ist?
Als Antwort auf die letzte Frage sind viele .net-Ausnahmemeldungen lokalisiert. Sie könnten also dort Probleme bekommen, wenn diese Software weit verbreitet wird. In der folgenden Frage finden Sie eine mögliche Problemumgehung dafür:
Ja.
Normalerweise sollte der Typ der Exception-Klasse (und möglicherweise eine Eigenschaft für die benutzerdefinierte Exception-Klasse) das sein, nach dem Sie suchen.
Wenn Sie mit einem Framework oder was auch immer schlecht geschrieben ist und Sie haben keinen anderen Weg sicher (nichts in Data-Eigenschaft oder InnerException oder irgendetwas), dann ist es schlecht, aber Sie müssen.
Tags und Links c# exception-handling exception