Autor Beitrag
Joey86
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: Do 20.05.10 11:20 
Hallo!
Macht so etwas hier Sinn?
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
  
if (index == -1)
{  
   continue;
}


Unterscheiden sich die beiden Codezeilen in ihrer Auswirkung?

Gruß
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 20.05.10 11: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: Do 20.05.10 12: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 20.05.10 13: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:
ausblenden 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).

ausblenden 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) {
      // directory has too less files try directory b 
      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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: Fr 21.05.10 23:04 
Super, ich danke dir für die Erläuterung! :)