Ist es eine schlechte Übung, eine Exception Message-Eigenschaft zu verwenden, um nach bestimmten Fehlern zu suchen?

8

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.

    
Luke Baulch 21.02.2011, 01:45
quelle

5 Antworten

6

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:

Ausnahmemeldungen auf Englisch?

    
James Gaunt 21.02.2011, 01:49
quelle
4

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.

    
Meligy 21.02.2011 01:48
quelle
1

In den meisten Fällen sollten Sie den Typ der Ausnahmeklasse oder eine Eigenschaft der Klasse verwenden können (wie .ErrorCode für einige Ausnahmetypen), aber wenn beides nicht möglich ist, kann die Verwendung der .Message der einzige Weg sein .

    
logicnp 21.02.2011 01:50
quelle
0

"ist es eine schlechte Übung, die Eigenschaft message zu verwenden, um die Ursache"

zu bestimmen

Ja

    
Rob 21.02.2011 01:48
quelle
0

kurze Antwort: ja. Aus diesem Grund haben sie verschiedene Klassen, um verschiedene Fehler zu unterscheiden. Wenn Sie etwas mit starker Typisierung machen möchten, können Sie dazu möglicherweise ein Enum-Feld verwenden.

    
Scott M. 21.02.2011 01:50
quelle