Frage zu C#, Try oder If?

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Frage zu C#, Try oder If?

Beitrag 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
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Frage zu C#, Try oder If?

Beitrag 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 ;-)
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Für PB gibts auch TryCatch, siehe PBOSL :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag 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 <)
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag 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
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag 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
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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.
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

Ja, das schaut verständlich aus, danke für das Beispiel!
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten