Laden...

Wie sollte ich try/catch richtig verwenden?

Erstellt von To_Ni vor 4 Jahren Letzter Beitrag vor 4 Jahren 833 Views
T
To_Ni Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren
Wie sollte ich try/catch richtig verwenden?

Schöne Weihnachten zusammen!

Folgende Frage:
An welcher Stelle verwende ich sinnvollerweise try/catch in meinem Beispiel?
So ist es ja wahrscheinlich zu viel?!
Bzw. ist es auch gute Praxis, mehrere Exception-Möglichkeiten über catch abzuprüfen?


      // Button-Click zum Speichern.
        private void btnBenutzerSpeichern_Click(object sender, EventArgs e)
        {
            try
            {
                reparatur = new ReparaturPreise();
                reparatur.EkPreis = tbEkPreis.Text;
                // ....

                reparatur.Id = DB.PreisSpeichern(reparatur); // Speichern in der Reparaturtabelle.
                DB.NeueIdInArbeitstabelleSpeichern(reparatur); // Speichern in der Arbeitstabelle.
                bindingListReparaturdaten.Add(reparatur);
                bindingSourceReparaturdatendaten.MoveLast();
                reparatur = (ReparaturPreise)bindingSourceReparaturdatendaten.Current;

            }
            catch (Exception ex)
            {
                Fehlerprotokoll f = new Fehlerprotokoll("PreisSpeichern / NeueIdInArbeitstabelleSpeichern",
                    "Form_Preise", sBenutzerName,
                    ProgrammVersion(), ex.Message, System.DateTime.Now);
                DB.FehlerprotokollNeuerEintrag(f);
            }
        }




 // DB-Statements.
 // Neuen Preis anlegen.
        public static Int32 PreisSpeichern(Reparatur reparatur)
        {
            try
            {
                using (entityName ctx = new entityName())
                {
                    tblreparatur neueReparatur = tblreparatur.AddToTblReparatur(
                        reparatur.EkPreis,
                        // ...
);

                    ctx.tblreparatur.AddObject(neueReparatur);
                    ctx.SaveChanges();
                    return neueReparatur.id;
                }
            }
            catch
            {
                return 0;
            }
        }
        public static Boolean NeueIdInArbeitstabelleSpeichern(Reparatur reparatur)
        {
            try
            {
                using (entityName ctx = new entityName())
                {
                    tblreparaturarbeit a = tblreparaturarbeit.Createtblreparaturarbeit(0,
                        reparatur.Id,
                        false,
                        false);

                    ctx.tblreparaturarbeit.AddObject(a);
                    ctx.SaveChanges();
                    return true;
                }
            }
            catch
            {
                return false;
            }
        }

4.938 Beiträge seit 2008
vor 4 Jahren

Hallo und ebenfalls frohe Weihnachten,

generell kannst du dich an Best Practices für Ausnahmen halten.

Du solltest aber niemals mittels catch alle Ausnahmen fangen (sondern wenn überhaupt dann nur bestimmte Exception-Klassen, z.B. bei Dateizugriffen IOException). So verschleierst du Fehler nur, weißt aber nicht, ob das Programm weiterhin in einem sauberen Zusatnd ist.

In der Main-Methode (bzw. im UI-Code* der Anwendung) darfst du aber alle Exceptions fangen und dem Anwender einen allgemeinen Fehlerdialog anzeigen (so daß der Entwickler benachrichtigt werden kann), anstatt die Anwendung "abstürzen" zu lassen.

* Threads benötigen zusätzlich einen eigenen Exception-Handler!