TRY...CATCH... E USING...

 Tópico anterior Próximo tópico Novo tópico

TRY...CATCH... E USING...

C#

 Compartilhe  Compartilhe  Compartilhe
#484454 - 12/09/2018 10:00:55

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom dia meus amigos.
Não sei se já perguntaram isso aqui no Forum (não achei), mas gostaria de saber qual a maneira correta de utilizar o Try/Catch e o Using. Seria:
try
{
    using (...)
    {
    {
}
catch
{
}

ou:

using(...)
{
    try
    {
    }
    catch
    {
    }
}


ou tanto faz? Qual a diferença?

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#484455 - 12/09/2018 10:34:49

LVFIOROT
SERRA
Cadast. em:Março/2012


Última edição em 12/09/2018 10:42:44 por LVFIOROT

depende.
no Primeiro caso, quando acontece a erro, não está mais acessível o bloco using para ser utilizado no cacth.
no Segundo caso, quando acontece a erro, O bloco using está acessível para ser utilizado no cacth.




#484456 - 12/09/2018 11:08:00

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


É importante que exista um tratamento na instancia superior, para que seja exibida ao usuário ou armazenada.
Na teoria, uma aplicação deve ser colocada em produção a partir do momento que você realizou todos os testes, e está ciente que não ocorrerá problemas, pois qualquer tratamento, mesmo que isolado, será interpretado apenas por quem desenvolveu.

Em ambos os casos, a exceção será disparada para a instancia superior, mas na segunda condição, caso não haja um tratamento na instancia superior, a sua aplicação resultará erro, podendo fechar repentinamente (se for window forms).



#484457 - 12/09/2018 11:21:57

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe

Última edição em 12/09/2018 11:27:34 por KERPLUNK

Blocos try...catch são "armadilhas" para exceções. Eles são responsáveis por tratar exceções lançadas por qualquer coisa dentro deles. Por causa disso, não há um padrão, um modo "correto" de ser usado. Coloque dentro do bloco try tudo aquilo que quiser monitorar quanto à exceções. Não é incomum ver uma estrutura assim:

try
{
    using (OleDbConnection cn = new OleDbConnection("bla bla"))
    {
        try
        {
            cn.Open();
        }
        catch (OleDbException oleException)
        {
            //trata exceção de conexão
        }
        using (OleDbCommand cmd = new OleDbCommand("select from tabela ......", cn)
        {
            try
            {
                cmd.Parameters.Add(xxxxx);
            }
            catch (OleDbNotSupportedException oleParameterException)
            {
                 //trata exception de parametro oledb
            }
            using (OleDbDataReader dr = cmd.ExecuteReader())
             {
                 try
                 {
                     dr.Read()
                 }
                 catch (bla bla bla)
                 {

                 }
            }
        }
    }
}
catch (Exception ex)
{

}


Vejam que a estrutura é bastante extensa e apesar de parecer "um monstro" é na verdade muito bem estruturada e uma das coisas mais aconselhável à ser feito, pois você terá uma granularidade excelente para tratamento de exceções. Obviamente que é trabalhoso, mas para ter um produto bom, você terá trabalho sempre. Bem na real, na minha opinião, tudo que pode lançar uma exceção deveria estar dentro de um bloco try independente, mesmo que já esteja dentro de um bloco try de nível mais baixo.


Por outro lado há quem defenda que é mais simples colocar tudo em um único bloco try e ter nos blocos catch, todas as exceptions possíveis de serem lançadas por cada coisa que é feita dentro do bloco try. Nesse caso é mais questão de opinião

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#484458 - 12/09/2018 11:39:04

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
E olha que não mencionei alguns pontos importantes, como Log e Eventos que podem estar também dentro de blocos try e using aninhados. E aqui vemos mais um ponto de destaque da OOP, todas essas coisas podem estar encadeadas e abstraídas de modo mais simplificado. Como essas ações são comuns para todas as operações, cria-se abstrações para evitar termos uma massaroca gigante de código, deixando assim tudo mais simples e mais organizado, além de muito mais fácil de ser implementado e depurado.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#484462 - 12/09/2018 13:25:51

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Obrigado pelo retorno pessoal, foi muito bem explicado, valeu.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário