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

Verfasst: 18.01.2007 21:13
von winduff
mir viel halt so nen Klasse Buch in die Hände
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
Übrigends, den besten Codeschnippsel, den ich jemals sah war irgendwie so
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.