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 ZeichenfolgeReadLine(): liest jeweils eine Zeile und gibtnullzurü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");
}
Aufgabe
EinfachErstelle eine Methode namens processFile, die:
- Einen Dateinamen als Zeichenfolgenparameter übernimmt
- Die
using-Anweisung mit einemStreamReaderverwendet, um alle Zeilen aus der Datei zu lesen - Die Anzahl der Zeilen in der Datei zurückgibt
- Wenn eine
FileNotFoundExceptionauftritt, „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
}
}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