Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT
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
precisa sim... faltou o catch?
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.
:)
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()
Interessantissímo esse WTF! p.s.: Vc. tá sumido da forum Msdn... Obrigado pela dica
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.
Powered by: Copyright © Israel Aéce