Start Debugging
2020-05-01 Aktualisiert 2023-11-05 csharp Edit on GitHub

C# using var (using-Deklaration)

Verwenden Sie die using-Deklarationen in C# 8 (`using var`), um IDisposable-Objekte ohne verschachtelte geschweifte Klammern freizugeben. Syntax, Geltungsbereichsregeln und wann `using`-Blöcke vorzuziehen sind.

Haben Sie sich schon einmal gewünscht, etwas deklarieren zu können, das beim Verlassen seines umgebenden Geltungsbereichs automatisch freigegeben wird, ohne dass weitere geschweifte Klammern und Einrückung in Ihrem Code nötig sind? Sie sind nicht allein. Sagen Sie hallo zu den using-Deklarationen in C# 8 🥰.

Mit using var können Sie nun schreiben:

void Foo()
{
    using var file = new System.IO.StreamWriter("myFile.txt");
    // code using file
}

statt:

void Foo()
{
    using (var file = new System.IO.StreamWriter("myFile.txt"))
    {
        // code using file
    }
}

Keine überflüssigen geschweiften Klammern mehr, keine zusätzliche Einrückung. Der Geltungsbereich des Disposables entspricht dem seines übergeordneten Geltungsbereichs.

Nun ein vollständigeres using-var-Beispiel:

static int SplitFile(string filePath)
{
    var dir = Path.GetDirectoryName(filePath);
    using var sourceFile = new StreamReader(filePath);

    int count = 0;
    while(!sourceFile.EndOfStream)
    {
        count++;

        var line = sourceFile.ReadLine();

        var linePath = Path.Combine(dir, $"{count}.txt");
        using var lineFile = new StreamWriter(linePath);

        lineFile.WriteLine(line);

    } // lineFile is disposed here, at the end of each individual while loop

    return count;

} // sourceFile is disposed here, at the end of its enclosing scope

Wie Sie im obigen Beispiel sehen, muss der umgebende Geltungsbereich keine Methode sein. Es kann zum Beispiel auch das Innere einer for-, foreach- oder while-Anweisung sein oder sogar ein using-Block, falls Sie ganz mutig sind. In all diesen Fällen wird das Objekt am Ende des umgebenden Geltungsbereichs freigegeben.

Fehler CS1674

using-var-Deklarationen liefern auch Compile-Time-Fehler, wenn der Ausdruck nach using kein IDisposable ist.

Error CS1674 ‘string’: type used in a using statement must be implicitly convertible to ‘System.IDisposable’.

Best Practices

In puncto Best Practices für using var gelten weitgehend dieselben Richtlinien wie für using-Anweisungen. Zusätzlich können Sie:

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Zurück