none
É uma boa prática usar o Try Catch desta forma? RRS feed

  • Pergunta

  • Pessoal, minha dúvida é a respeito de boas práticas.

    É correto usar o tryCatch não tratando o erro? Por exemplo:


    try
    {
        int i = Convert.ToInt16(TexBox1.Text)
    }
    catch {}

    Neste caso, a variável "i" só vai receber o valor caso o que esteja no TextBox não seja letras ou símbolos, pois se for, irá gerar um Exception.

    Sei de todas as validações, foi apenas um exemplo.

    Está correto usar o TryCatch sabendo que se ocorrer um erro eu simplesmente não quero que ocorra nada?

    segunda-feira, 28 de setembro de 2009 19:12

Respostas

  • Bruno, o que você está tratando??
    A princípio nada, então isso não é uma boa prática... é uma gambiarra!
    :)

    A boa prática é você ter uma classe do tipo "Helper" estática sabe?

    Tipo TypeHelper.GetInt(TextBox1.Text)

    e lá na typeHelper aplicar algo realmente funcional, tipo um regexmanager que é performático e inteligente.
    De resto, o try catch deve ser utilizado quando existe um tratamento para uma exceção! Não quer dizer que você precise disparar mensagem na tela para o usuário, mas isso que você fez é muito inviável, principalmente pq o try catch não é nada performático. Gerar uma exceção via try catch em grande quantidade pode tornar o processo mais lento do que o esperado
    ;)

    boa sorte
    segunda-feira, 28 de setembro de 2009 19:18
  • Bruno só complementando o que Leandro disse, eu usaria o tryParse. Porém acho estranho você não avisar o usuário do que ococrreu, eu mostraria uma mensagem do porque não ocorreu nada, será muito confuso pro usuário se ele inserir qualquer coisa sem ser número e não ver resultado, mostrar uma mensagem é uma boa prática também.
    • Marcado como Resposta BrunoCosta.dsn terça-feira, 29 de setembro de 2009 15:30
    segunda-feira, 28 de setembro de 2009 20:07
  • Bruno... Independente da idéia da conversão do número... try/catch com o bloco catch "vazio" é do mal. Não se deve usar isso... Existem raríssimos casos em que faz sentido deixar o catch em branco, mas na outra grande maioria, vc vai acabar "mascarando" um erro que vai te trazer problemas posteriormente. Abraço, Eric
    • Marcado como Resposta BrunoCosta.dsn terça-feira, 29 de setembro de 2009 15:30
    terça-feira, 29 de setembro de 2009 13:51

Todas as Respostas

  • Bruno, o que você está tratando??
    A princípio nada, então isso não é uma boa prática... é uma gambiarra!
    :)

    A boa prática é você ter uma classe do tipo "Helper" estática sabe?

    Tipo TypeHelper.GetInt(TextBox1.Text)

    e lá na typeHelper aplicar algo realmente funcional, tipo um regexmanager que é performático e inteligente.
    De resto, o try catch deve ser utilizado quando existe um tratamento para uma exceção! Não quer dizer que você precise disparar mensagem na tela para o usuário, mas isso que você fez é muito inviável, principalmente pq o try catch não é nada performático. Gerar uma exceção via try catch em grande quantidade pode tornar o processo mais lento do que o esperado
    ;)

    boa sorte
    segunda-feira, 28 de setembro de 2009 19:18
  • Bruno só complementando o que Leandro disse, eu usaria o tryParse. Porém acho estranho você não avisar o usuário do que ococrreu, eu mostraria uma mensagem do porque não ocorreu nada, será muito confuso pro usuário se ele inserir qualquer coisa sem ser número e não ver resultado, mostrar uma mensagem é uma boa prática também.
    • Marcado como Resposta BrunoCosta.dsn terça-feira, 29 de setembro de 2009 15:30
    segunda-feira, 28 de setembro de 2009 20:07
  • Verdade,
    é fato que é sempre bom mostrar uma mensagem ou se preferir evitar este problema, BLOQUEIE a digitação de letras! :)

    No evento KeyPress da caixa de texto, insira algo como if (Char.IsNumber(e.KeyChar)) { e.handled = true;}
    isso deve evitar que qualquer coisa que não seja numero seja digitado
    ;)

    Eu particularmente tenho um componente especializado do textbox que possui várias opções de aceitação.
    No designer eu informo o que quero permitir (allownumber = true, allowletter = false, allowwhitespace=false;, etc etc etc)  e crio tratamentos para cada um destes que informei.
    Ao final, basta arrastar o componente pra tela, escolher as opções pra cada um e pronto
    :)

    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    segunda-feira, 28 de setembro de 2009 20:11
  • Bruno... Independente da idéia da conversão do número... try/catch com o bloco catch "vazio" é do mal. Não se deve usar isso... Existem raríssimos casos em que faz sentido deixar o catch em branco, mas na outra grande maioria, vc vai acabar "mascarando" um erro que vai te trazer problemas posteriormente. Abraço, Eric
    • Marcado como Resposta BrunoCosta.dsn terça-feira, 29 de setembro de 2009 15:30
    terça-feira, 29 de setembro de 2009 13:51

  • Int32

     

    .TryParse("123123", i);


    Este é o modo certo de usar :)

    quarta-feira, 6 de janeiro de 2010 12:14