Entwickler-Ecke
C# - Die Sprache - Anfängerfrage zu selbst geworfenen Exceptions
Joey86 - Do 20.05.10 10:20
Titel: Anfängerfrage zu selbst geworfenen Exceptions
Hallo!
Macht so etwas hier Sinn?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| try { if (index == -1) { throw new MyOwnException(); } } catch (MyOwnException) { continue; } |
Oder kann ich dann gleich lediglich so verfahren:
C#-Quelltext
1: 2: 3: 4: 5:
| if (index == -1) { continue; } |
Unterscheiden sich die beiden Codezeilen in ihrer Auswirkung?
Gruß
danielf - Do 20.05.10 10:49
Hallo,
über den Sinn kann man hier sicherlich diskutieren :)
Es ist so, dass beim Debugging du es so einstellen kannst, das er sobald eine Exception geworfen wird anhält. Sprich der Debugger in dem Fall bei Zeile 5 stehen bleibt.
Im Produktiven (Release) Version würde die geworfene Zeile von dem Catch Block aufgefangen werden und du landest auf Zeile 9. Das continue brauchst du eigentlich nur wenn es innerhalb einer Schleife ist. Macht also so wie es da steht gar keinen Sinn (im Vergleich zu ohne continue;).
Wenn du allerdings anstelle des Continue ein Fehlerhandling einbauen willst und das hier nur als Beispiel genommen hast, dann macht dieses Throw catch Konstruktur nur sinn, wenn du eine extrene Exception erwartest und diese anders abhandlen willst (zum Beispiel eine InterrupException). Aber ich denke das ist sehr sehr theoretisch und du solltest das throw in kombination mit einem Catch weglassen (es sei den der catch ist natürlich an einer Stelle wo er sinn macht).
Gruß
Joey86 - Do 20.05.10 11:28
Ich befinde mich in einer Schleife und das ist sozusagen meine Fehlerbehandlung.
Was verstehst du unter einer externen Exception?
Wann macht es denn Sinn eine eigene Exception zu werfen?
danielf - Do 20.05.10 12:05
Wenn du die Exception unterschiedlich behandeln willst.
Zum Beispiel du erwartest 5 Dateien in einem Ordner, es befinden sich aber nur 3 drin.. dann wirfst du eine eigne Exception. Sprich:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public File[] GetFiles(string path) { DirectoryInfo dir = new DirectoryInfo(path);
File[] files = dir.GetFiles();
if (files.Length < 5) { throw new MyException("Not enough files in directory"); }
return files; } |
Bei der Verwendung möchtest du den Pfad ändern, wenn weniger als 5 Datein drin liegen, bzw. einen Fehleranzeigen, wenn der PFad überhaupt nicht existiert(dann wirft GetFiles eine DirectoryNotFoundException).
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| public static void Main(string[] args) { Blub b = new Blub(); File[] files; try { files = b.GetFiles("directoryA"); catch (MyException expt) { files = b.GetFiles("directoryB"); } } |
So mal grob..
D.h. dadurch das du einen eigenen Exception typ (MyException) verwendest kannst du unterschiedlich im catch block darauf reagieren. Wenn nun das Verzeichnis "directoryA" überhaupt nicht existiert beendet sich das Programm und die DirectoyNotFonudException wird angezeigt. Existiert "directoryA" hat aber weniger als 5 files drin wird er das Verzeichnis "directoryB" versuchen.
Ich hoffe das Beispiel veranschaulicht dir den Nutzen von "Benutzerdefinierten" Exceptions, bzw. Exceptions allgemein. Den du könntest ja auch individuell über catch(DirectoryNotFoundException expt) auf nicht existierende Verzeichnisse reagieren.
Gruß
Joey86 - Fr 21.05.10 22:04
Super, ich danke dir für die Erläuterung! :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!