Seite 1 von 2

Frage zu C#, Try oder If?

Verfasst: 18.01.2007 21:00
von winduff
Ahoi,

wo liegt eigentlich der Unterschied zwischen:

Code: Alles auswählen

  try
            {
                // ....
            }
            catch (IrgendEinException)
            {

                   // ....
            }
            catch (Exception)
            {
                Console.WriteLine("auch nix gut");
            }
und dem normalen if?

Gibt es vor/nachteile bzw spezielle Anwendungsgebiete?

Thanks,
Chris

Re: Frage zu C#, Try oder If?

Verfasst: 18.01.2007 21:07
von Kiffi
> Gibt es vor/nachteile bzw spezielle Anwendungsgebiete?

Try-Catch dient der Behandlung von Ausnahmen (Exceptions).
Entspricht also im groben den OnError*-Befehlen in PB.

Das kriegst Du mit If nicht hin.

Grüße ... Kiffi

P.S.: Ich bin schwer enttäuscht, dass Du Dich jetzt doch für C# entschieden hast ;-)

Verfasst: 18.01.2007 21:10
von ts-soft
Für PB gibts auch TryCatch, siehe PBOSL :wink:

Verfasst: 18.01.2007 21:13
von winduff
mir viel halt so nen Klasse Buch in die Hände :mrgreen:

Da hab ich mich wohl getäuscht, ich dachte die Exceptions wären wie die Ergebnisse aus ner If-Abfrage <)

Verfasst: 19.01.2007 09:54
von Karl
File-Operationen würde ich auch immer in Try-Catch-Blöcke einfügen, denn die sind potentiell immer gefährdet (besonders das Öffnen nicht vorhandener Dateien).

Was für ein Buch hast du denn?

Gruß Karl

Verfasst: 19.01.2007 10:35
von Tafkadasom2k5
Kurze Erklärung, was Try-Catch bedeutet und wozu es ist
Remarks
Statements in the TRY section are executed normally. The first time a run-time error occurs, control is transferred to the CATCH section. If no run-time errors are generated in the TRY section, the CATCH section is skipped entirely.

[...]
So kannst du unvorhersehbare aber auch vorhersehbare Fehler abfangen und dein Programm diese ausgeben lassen. Es gab glaube ich auch eine OnErrorLib in PB (von Purefan, aber fest in PB integriert) die etwas ähnliches macht.

Meistens werden Datei und Speichersachen mit try-catch versehen, da dort die meisten Fehler- vorhergesehen wie auch unvorhergesehen passieren. Sei es, dass die Datei gerade gelockt wurde (durch ein anderes Programm) oder das was mit der Speicherreservierung schief lief usw. Stell dir mal vor, du würdest nicht korrekt auf den Fehler reagieren und dein Programm wüprde einfach so weiterlaufen... garnicht gut 8)

Übrigends, den besten Codeschnippsel, den ich jemals sah war irgendwie so

Code: Alles auswählen

TRY
  Machwas()
CATCH
 Machwas()
END TRY
:lol: :lol: :mrgreen:
Also so richtig sinnfrei xD

Hoffe, dass ich dir das ein wenig näher legen konnte...

Gr33tz
Tafkadasom2k5

Verfasst: 19.01.2007 14:02
von winduff
Danke, werd ich mir merken... Überall einsetzen wär aber auch Unsinnig + Zeitverschwendung?! Dafür kann man dann im "leichteren" Fall If-Abfragen benutzen oder?

> Was für ein Buch hast du denn?

"Visual C# 2005" von Microsoft Press

ISBN: 3-86063-543-3
59,90 EUR

Verfasst: 19.01.2007 14:55
von stbi
Vorteile des try/catch/finally-Mechanismus sind, dass die Fehlerbehandlung vom eigentlichen Code getrennt werden kann und dass auf unterschiedliche Fehlerklassen entsprechend reagiert werden kann.

Beispiel für Fehlerbehandlung im Code:

Code: Alles auswählen

if Dateigröße()>0
  if Dateiöffnen()
    if Speicherreservieren(Dateigröße)
      if Dateilesen 
        indenSpeicherkopieren
        DateiSchliessen()
      else
        debug Lesefehler
      endif
    else
      debug nicht genug Arbeitsspeicher
    endif
  else
    debug Kann Datei nicht öffnen
  endif
else
  debug Datei leer oder nicht vorhanden
endif
Beispiel für Fehlerbehandlung mit try/catch:

Code: Alles auswählen

try{
  Dateigröße()
  Dateiöffnen()
  Speicherreservieren(Dateigröße)
  Dateilesen()
  DateiSchliessen()
}
catch(IO-Fehler){
  debug IO-Fehler
}
catch(Speicher-Fehler){
  debug Memory-Fehler
}
finally{
  debug und weiter jetzt mit Blasmusik
  debug Spuren beseitigen und unauffällig weitermachen
}
So muss nicht jede einzelne Operation auf Erfolg oder Mißerfolg geprüft werden, sondern nur die ganze Transaktion. Der Code bleibt somit übersichtlich.

Für normale Programmabläufe bzw. -verzweigungen ist try/catch normalerweise nicht zu verwenden. Es können jedoch exceptions ausgelöst werden (throw), wenn das Programm in eine Situation kommt, in der am besten die ganze Transaktion abgebrochen wird.

Verfasst: 19.01.2007 16:58
von winduff
Ja, das schaut verständlich aus, danke für das Beispiel!

Verfasst: 19.01.2007 20:45
von ts-soft
@Tafkadasom2k5
>> Es gab glaube ich auch eine OnErrorLib in PB (von Purefan, aber fest in PB integriert) die etwas ähnliches macht.
Und es gibt: PBOSL_TryCatch, die genau dasselbe macht. IMHO besser anzuwenden als OnErrorLib.