Start Debugging
2020-05-01 Обновлено 2023-11-05 csharp Edit on GitHub

C# using var (using-объявление)

Используйте using-объявления C# 8 (`using var`) для освобождения объектов IDisposable без вложенных фигурных скобок. Синтаксис, правила области видимости и когда лучше использовать блок `using`.

Когда-нибудь хотели объявить нечто, что автоматически освобождается по выходу из охватывающей области видимости, не добавляя в код ещё пару фигурных скобок и отступов? Вы не одиноки. Поприветствуйте using-объявления C# 8 🥰.

С using var теперь можно сделать так:

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

вместо:

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

Никаких лишних фигурных скобок, никакой лишней индентации. Область видимости disposable совпадает с областью видимости его родителя.

Теперь более полный пример using var:

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

Как видно из примера выше, охватывающая область не обязательно должна быть методом. Это может быть и тело for, foreach или while, или даже блок using, если вам очень хочется. В каждом случае объект будет освобождён в конце охватывающей области видимости.

Ошибка CS1674

using-var-объявления также сопровождаются ошибками на этапе компиляции, если выражение после using не является IDisposable.

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

Лучшие практики

В части лучших практик для using var в основном действуют те же правила, что и при работе с using statements. Помимо них, имеет смысл:

Comments

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

< Назад