Menu
Coddy logo textTech

Using im Vergleich zu Try-Finally

Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy. Lektion 28 von 66.

Sowohl using-Anweisungen als auch try-finally-Blöcke helfen dabei, Ressourcen zu verwalten, die ordnungsgemäß freigegeben werden müssen. Die using-Anweisung bietet eine sauberere, kompaktere Möglichkeit, sicherzustellen, dass IDisposable-Objekte ordnungsgemäß bereinigt werden.

Hinweis: using ersetzt das try-finally-Muster zur Ressourcenfreigabe. Es ersetzt nicht try-catch. Du kannst einen using-Block weiterhin in einen try-catch-Block einschließen, um Ausnahmen zu behandeln.

Sehen wir uns zunächst einen try-finally-Ansatz an:

StreamReader reader = null;
try
{
    reader = new StreamReader("file.txt");
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}
finally
{
    if (reader != null)
    {
        reader.Dispose();
    }
}

Die using-Anweisung vereinfacht diesen Code:

using (StreamReader reader = new StreamReader("file.txt"))
{
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}

Die using-Anweisung ruft automatisch Dispose() auf, wenn der Block beendet wird, selbst wenn eine Ausnahme auftritt.

Was ist StreamReader?
StreamReader ist eine Klasse, die zum Lesen von Text aus Dateien verwendet wird. Du erstellst eine Instanz, indem du einen Dateinamen übergibst, und sie öffnet die Datei zum Lesen. Sie implementiert IDisposable und muss daher nach der Verwendung ordnungsgemäß geschlossen werden – genau das übernimmt using für dich.

Häufige StreamReader-Methoden:

  • ReadToEnd(): liest die gesamte Datei als eine einzelne Zeichenfolge
  • ReadLine(): liest jeweils eine Zeile und gibt null zurück, wenn das Ende der Datei erreicht ist

Um Zeilen in einer Datei zu zählen, kannst du eine ReadLine()-Schleife verwenden:

using (StreamReader reader = new StreamReader("file.txt"))
{
    int lineCount = 0;
    while (reader.ReadLine() != null)
    {
        lineCount++;
    }
    Console.WriteLine(lineCount);
}

Du kannst using auch mit try-catch kombinieren, um Ausnahmen wie eine fehlende Datei zu behandeln:

try
{
    using (StreamReader reader = new StreamReader("file.txt"))
    {
        int lineCount = 0;
        while (reader.ReadLine() != null)
        {
            lineCount++;
        }
        Console.WriteLine(lineCount);
    }
}
catch (FileNotFoundException)
{
    Console.WriteLine("File not found");
}
challenge icon

Aufgabe

Einfach

Erstelle eine Methode namens processFile, die:

  1. Einen Dateinamen als Zeichenfolgenparameter übernimmt
  2. Die using-Anweisung mit einem StreamReader verwendet, um alle Zeilen aus der Datei zu lesen
  3. Die Anzahl der Zeilen in der Datei zurückgibt
  4. Wenn eine FileNotFoundException auftritt, „File not found“ ausgibt und -1 zurückgibt

Probier es selbst

using System;
using System.IO;

class ProcessFile
{
    public static int processFile(string filename)
    {
        // Schreibe deinen Code hier
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C#-Compiler