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

C# using var (using declaration)

Use as using declarations do C# 8 (`using var`) para descartar objetos IDisposable sem chaves aninhadas. Sintaxe, regras de escopo e quando preferir blocos `using`.

Já desejou poder declarar algo que seja descartado automaticamente quando seu escopo terminar, sem adicionar mais um par de chaves e indentação ao seu código? Você não está sozinho. Diga olá às using declarations do C# 8 🥰.

Com using var agora você pode fazer:

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

em vez de:

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

Sem mais chaves desnecessárias, sem mais indentação. O escopo do disposable corresponde ao escopo do pai.

Agora, um exemplo mais completo de 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

Como você pode notar no exemplo acima, o escopo que contém o using não precisa ser um método. Pode ser o interior de um for, foreach ou while, por exemplo, ou até mesmo um bloco using, se você for radical assim. Em cada um desses casos o objeto será descartado ao final do escopo que o contém.

Erro CS1674

As using var declarations também trazem erros em tempo de compilação caso a expressão após using não seja um IDisposable.

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

Boas práticas

Em termos de boas práticas para using var, basicamente siga as mesmas diretrizes que valem para using statements. Além delas, você pode:

Comments

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

< Voltar