1
resposta

É bom usar o using() neste caso?

No Código a seguir aonde utilizamos a classe File para acessar o arquivo é uma boa pratica e portando usar o using() para que no final seja chamado implicitamente o Dispose()?

public static string[] ReadFile(string path)
        {
            try
            {
                    //ESSA LINHA EM QUESTÃO -> É BOM USAR USING()????
                string[] lines = System.IO.File.ReadAllLines(path);

                return lines;
            }
            catch (Exception)
            {
                return null;
            }
        }

[Edit] fiz a implementação fazendo a seguinte alteração :

using(string[] lines = System.IO.File.ReadAllLines(path))
{
        return lines;
}

Porém aparece o seguinte erro " Typed used in a using statement must be implicity convertible to "System.IDisposable" ". Dito isto estou sem saber o pq esse erro acontece...

1 resposta

Oi Eduardo, tudo bom?

Nesse caso específico, não é possível usar o using. Isso porque o using nada mais é que um açúcar sintático para um try catch parecido com:

string[] lines = System.IO.File.ReadAllLines(path)
try
{
    //...
}
finally
{
   lines.Dispose();
}

Ou seja, ele tenta chamar o método Dispose pra fechar o que for possível nessa instância.

Porém, nossa instância não é um objeto que contenha esse método Dispose. No nosso caso temos como retorno do ReadAllLines já as linhas do arquivo.

Ou seja, o próprio ReadAllLines já cuida de fechar tudo que for necessário nesse processo =)

Portanto, no nosso caso, o try catch básico é o ideal mesmo.

Abraço!