Welcher Ausnahmetyp wird für Strings ausgegeben

8

Wenn ich Folgendes habe, wirklich für jede Zeichenkette, bei der Sie IsNullOrEmpty überprüfen und es leer auftaucht, welche Art von Ausnahmetyp sollte man werfen, und es ist kein Argument für eine Methode ?

Ich habe es immer schwer, Ausnahmetypen auszuwählen, weil es so verdammt viele gibt. Und das ist nur ein Wert aus der web.config und überprüfen, ob SandboxSoapApiUsername leer zurückgegeben.

%Vor%

Es hängt wahrscheinlich von der Verwendung / Kontext richtig ab? Nun, ich werde die zurückgegebene Zeichenfolge verwenden, um ein privates Feld für die Klasse festzulegen. Daher muss ich prüfen, ob es sich um eine leere Zeichenfolge früh im Prozess und nicht später handelt (anstatt anderen Code zu verwenden, um die Eigenschaft zu überprüfen, die mit dem privaten Feld übereinstimmt, setze ich ConfigUtility.SandboxSoapApiUsername auf).

Da die Eigenschaften in dieser Klasse, auf die ich jeden ConfigUtility.MEthodName aufstelle, in einer SOAP-Anfrage verwendet werden, dachte ich, dass UriFormatException hier angebracht wäre, obwohl dies nicht der Uri ist?

    
PositiveGuy 19.01.2010, 19:06
quelle

6 Antworten

9

Das hängt davon ab, wann die Zeichenfolge kommt. Ein Argument könnte eine ArgumentNullException verursachen. Die Konfiguration löst möglicherweise eine ConfigurationException aus (die in diesem Fall anwendbar zu sein scheint). Oder Sie können natürlich Ihre eigenen erstellen.

    
blowdart 19.01.2010, 19:10
quelle
10

Methoden in .NET Framework unterscheiden normalerweise zwischen null und einem ungültigen Wert, der für ein Argument übergeben wird. Ich denke, Sie sollten eine Argument Null Exception werfen, wenn der Wert Null ist und eine Argument Exception, wenn sie ungültig ist.

%Vor%

Wenn der Wert kein Argument ist, aber z. B. während der Initialisierung geladen wird, denke ich, dass eine ungültige Operation Exception angemessen wäre:

%Vor%     
dtb 19.01.2010 19:11
quelle
5

Sie werden die meiste Zeit damit verbringen, aus der unten stehenden Liste auszuwählen, wenn Sie eine new -Ausnahme werfen (im Gegensatz zu einem throw ).

  1. ConfigurationException
    • Die Ausnahme, die ausgelöst wird, wenn ein Konfigurationssystemfehler aufgetreten ist.
  2. ArgumentException
    • Die Ausnahme, die ausgelöst wird, wenn eines der Argumente einer Methode nicht gültig ist.
  3. InvalidOperationException
    • Die Ausnahme, die ausgelöst wird, wenn ein Methodenaufruf für den aktuellen Status des Objekts ungültig ist.

1)
Dies ist wahrscheinlich nicht sinnvoll, es sei denn, Sie wählen die Einstellung aus einer app.config oder web.config:

  

Die ConfigurationException-Ausnahme   wird ausgelöst, wenn die Anwendung versucht   um Daten zu lesen oder zu schreiben   Konfigurationsdatei ist aber   erfolglos. Einige mögliche Gründe   Dazu kann fehlerhafte XML in enthalten   die Konfigurationsdatei, Datei   Berechtigungsprobleme und Konfiguration   Eigenschaften mit Werten, die nicht sind   gültig.

2)
Es ist kein Argument, also macht dies keinen Sinn.

3)
Dies ist der beste der drei, da sich das Objekt in einem ungültigen Zustand befindet. Je nachdem, wie groß Ihre Konfigurationseinstellungen sind, würde ich jedoch lieber eine eigene Exception von System.Exception erstellen.

Es gibt zwei Denkrichtungen, von denen abgeleitet werden kann - System.Exception und ApplicationException *. Zwei verschiedene Entwickler des Framework-Teams haben unterschiedliche Ansichten geäußert, von denen sie denken, dass Sie sie erben sollten. Ich bleibe bei Jeffrey Richters Ansicht .

Wenn all die oben genannten Wörter wie woffle klingen, dann könnten Sie einfach eine auswählen, die Ihrer Meinung nach am relevantesten ist von die Liste .

* Sieht so aus, als ob MSDN jetzt seinen Framework-Entwicklern zustimmt, dass ApplicationException ein Designfehler war

    
Chris S 19.01.2010 19:55
quelle
4

Sie benötigen eine InvalidConfiguration-Ausnahme - definieren Sie eine

%Vor%     
pm100 19.01.2010 19:11
quelle
1

Wenn es als Argument übergeben wurde, ArgumentNullException .

Andernfalls hängt es wirklich davon ab, was die Zeichenfolge null im Zusammenhang mit Ihrer Anwendung bedeutet. Haben Sie keine Angst, benutzerdefinierte Exception-Typen zu definieren, wenn sich im Basis-Framework für das Szenario nicht etwas befindet.

    
Kevin Montrose 19.01.2010 19:11
quelle
0

Da es so aussieht, als wäre etwas nicht richtig konfiguriert, würde ich System.Configuration.ConfigurationErrorsException vorschlagen.

Hinweis: Verwenden Sie nicht System.Configuration.ConfigurationException . Es ist eine ältere Version und wurde veraltet.

Hinweis 2: Obwohl ich 90% sicher bin, dass es sich um einen fehlenden Konfigurationswert handelt, werfen Sie eine ArgumentException oder ArgumentOutOfRangeException aus, wenn ein Methodenparameter fehlt .

    
Patrick Karcher 19.01.2010 19:12
quelle