Finally-Block
Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy. Lektion 27 von 66.
Der finally-Block enthält Code, der immer ausgeführt wird, unabhängig davon, ob eine Ausnahme auftritt oder nicht, sogar wenn eine return-Anweisung in den try- oder catch-Blöcken vorhanden ist.
Erstelle eine grundlegende Try-Catch-Finally-Struktur:
try
{
// Code, der eine Ausnahme auslösen könnte
int result = 10 / 2;
Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
// Code, der die Ausnahme behandelt
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
// Code, der immer ausgeführt wird
Console.WriteLine("This always executes");
}
Der finally-Block ist nützlich für Aufräumaufgaben wie das Schließen von Dateien oder Datenbankverbindungen:
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader("data.txt");
string content = file.ReadToEnd();
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("File not found.");
}
finally
{
// Schließe immer die Datei, auch wenn eine Ausnahme aufgetreten ist
if (file != null)
{
file.Close();
}
}
Aufgabe
EinfachErstelle eine Methode namens ProcessData, die:
- Einen String-Parameter entgegennimmt, der einen Dateinamen darstellt
- Versucht, die Datei zu öffnen und ihren Inhalt zu lesen
- Den Inhalt in die Konsole schreibt
- Ressourcen ordnungsgemäß mithilfe eines finally-Blocks bereinigt
- FileNotFoundException und IOException behandelt
Wenn die Datei nicht gefunden werden kann, gib Folgendes aus: "ERROR: File not found: [filename]"
Wenn ein anderer E/A-Fehler auftritt, gib Folgendes aus: "ERROR: Could not read the file: [error message]"
Gib im finally-Block immer "File operation completed." aus, unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht.
Probier es selbst
using System;
using System.IO;
class Program
{
public static void ProcessData(string filename)
{
// Schreibe deinen Code hier
}
static void Main(string[] args)
{
string filename = Console.ReadLine();
ProcessData(filename);
}
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Mehrdimensionale Arrays
Grundlagen 2D-Arrays2D-Arrays deklarieren und initialisierenAuf Elemente von 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysGezackte ArraysHäufige MatrixoperationenZusammenfassung – Mehrdimensionale Arrays4Techniken zur Ablaufsteuerung
Frühe RückgabenWächterklauselnSprunganweisungen (goto)Break und ContinueVerschachtelte Bedingungen abflachen7Logische Operatoren – Fortgeschritten
KurzschlussauswertungBedingte logische OperatorenOperatorrangfolgeRückblick – Erweiterte Operatoren2Fortgeschrittene Entscheidungslogik
Mehrere BedingungenKomplexe boolesche LogikVergleich: If vs. SwitchVerschachtelte Switch-AnweisungenRückblick – Fortgeschrittene Entscheidungen5Fehlerbehandlung mit Exceptions
Grundlagen von Try-CatchException-TypenMehrere Catch-BlöckeArbeiten mit DateienFinally-BlockUsing im Vergleich zu Try-FinallyBenutzerdefinierte ExceptionsZusammenfassung – Fehlerbehandlung3Schleifenverbesserungen
SchleifenleistungKomplexe IterationJeder SchleifentypSchleifen refaktorierenRückblick – Optimierte Schleifen6Behandlung von Nullwerten
Grundlagen von NullreferenzenNullable WerttypenMuster zur NullprüfungDefensive ProgrammierungZusammenfassung – NullsicherheitÜbe selbstständig: Online-C#-Compiler