7 Stimmen

Wie kann man Ausnahmen behandeln, ohne try catch zu verwenden?

using (SqlConnection con = new SqlConnection())
{
     try
     {
          con.Open();
     }
     catch (Exception ex)
     {
          MessageBox.Show(ex.Message);
     }
}

Das funktioniert gut. Aber ich möchte wissen, können wir behandeln Ausnahme ohne Verwendung try catch wie irgendetwas if else ? Oder ist es mendetory zu verwenden try catch .

0voto

CosmicFreddy Punkte 3

Die obigen Antworten sind richtig. Es ist jedoch zusätzlich zu beachten, dass es möglich ist, einen globalen Exception-Handler einzurichten. Dies löst jedoch nicht die Notwendigkeit einer defensiven Kodierung, wie zuvor erwähnt. Wenn jedoch Bedenken bestehen, dass alle Ausnahmen behandelt werden müssen (z. B. um den Fehler zu protokollieren), dann kann dieser Ansatz sehr hilfreich sein.

0voto

Steven C. Britton Punkte 462

Ich baue ein System auf, das Echtzeit-Datenströme verwendet und daher mit Fehlern umgehen muss, die auftreten können, wenn alles andere so gut wie im Leerlauf ist. Die API, die ich verwende, gibt die Fehler über eine Methode namens "error" mit der angehängten Ausnahme an das Programm zurück. Diese Methode könnte dann den Fehler auslösen, aber das ist problematisch, weil ich nicht sehen kann, wie es eine gute Idee ist, mein ganzes Programm in einen try-catch-Block zu packen.

Um das Problem zu umgehen, werde ich einen Event-Handler einrichten, der das Ereignis im Hauptteil meines Programms auslöst, das dann mit dem Fehler umgehen kann, der zu diesem Zeitpunkt ausgelöst wird.

Zum Beispiel:

In der Hauptklasse:

private void Error(object sender, EventArgs e) {

    Exception ex = sender as Exception;

    Console.WriteLine("Error: " + ex); // Or whatever you want to do with the exception

    // You could even add this if you want to then use the try -catch sequence (which 
    // makes the exception easier to parse and also enables you to stop the program
    // with unhandled exceptions if it's something catastrophic:

    try {

        throw ex;
    } catch (put.your.exception.detail.here) {

        // do stuff
   } finally {

       // do other stuff
   }
}

(In der Klasse, die den Fehler von der API erhält):

class Foo {
    public event EventHandler ThrowError;

    protected virtual void OnError(Object src, EventArgs e) {

        if (ThrowError != null) {

            ThrowError(src, e);
        }
    }

    private virtual void error(Exception e) {

        OnError(e, EventArgs.Empty);
    }
}

0voto

nsf-coding Punkte 36

In .NET Core 3.1 (oder früher?), Sie könnten einen globalen Catcher für unbehandelte Ausnahmen einrichten. Allerdings wird die APP nicht weiter ausgeführt, danach.

Hier ist ein Beispiel:

https://learn.microsoft.com/en-us/dotnet/api/system.appdomain.unhandledexception?redirectedfrom=MSDN&view=netcore-3.1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X