Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

Novo WTF!

Eu encontrei um novo WTF:

try
{
    using (cnn)
    {
        cnn.Open();
        cmd.ExecuteNonQuery();
    }
}
finally
{
    cnn.Close();
}

Eu acredito que não preciso explicar porque o código acima é considerado um WTF, ou preciso?

posted on Tuesday, January 09, 2007 8:11 PM

Feedback

# re: Novo WTF! 1/10/2007 8:48 PM Beginner .net

precisa sim... faltou o catch?

# re: Novo WTF! 1/11/2007 3:00 PM Israel Aece

Olá,

Não, me refiro ao método Close que está sendo chamado. Quando o "using" é compilado, ele transforma isso em um bloco Try/Finally para liberar o recurso de forma segura, inclusive, somente é permitido utilizar objetos em blocos "using" se o mesmo implementar a Interface IDisposable. Sendo assim, o Try/Finally que envolve o bloco "using" é desnecessário e a chamada do método Close também, já que o método Dispose chama o método Close.

Este códido poderia ser melhorado da seguinte forma:

[ Um Componente ]
using (cnn)
{
cnn.Open();
cmd.ExecuteNonQuery();
}

[ UI ]
try
{
using (cnn)
{
cnn.Open();
cmd.ExecuteNonQuery();
}
}
catch(Exception ex)
{
LogError(ex)
}

Claro que isso é só um exemplo, mas o ideal é você tentar apanhar desde a Exception mais específica para a mais genérica, pois isso poderá possibilitar o seu programa continuar a trabalhar em harmonia, pois poderá tratar a exceção.

# re: Novo WTF! 1/19/2007 1:28 AM Alexandre Tarifa

:)

# re: Novo WTF! 1/30/2007 1:43 AM anonymous

Traduzindo, quando chega ao finally, a variável cnn provavelmente já é uma referência nula, ou no mínimo o método Close() já foi executado na chamada implícita ao Dispose()

# re: Novo WTF! 3/23/2007 12:44 PM Wesley

Interessantissímo esse WTF!
p.s.: Vc. tá sumido da forum Msdn...
Obrigado pela dica

# re: Novo WTF! 3/23/2007 10:52 PM Israel Aece

Ola Wesley,

O desaparecimento é especificamente no forum de ASP.NET. Mas eu ainda continuo por lá, só que agora eu mudei o meu foco de atuação, ou seja, começarei e contribuir na área de CSD.

Title  
Name  
Url
Box Code
Protected by FormShield
Comments