Olá Pessoal, como vão as coisas?
Recentemente na minha diária jornada de programador .Net, surgiu uma pequena dúvida quando eu fui converter um valor String para Int32. Sempre usei o Convert.ToInt32, mas sempre é bom a gente tentar verificar se existe algum outro método de outra classe que faz a "coisa" melhor, tentem pegar este costume, um dia verá que é importante.
Então, dei uma lida na documentação e vi que há uma diferença simples entre estes dois métodos.
Imaginemos que temos as seguintes strings para converter:
string s1 = "1234";
string s2 = "1234.65";
string s3 = null;
string s4 = "1234567891234567891123456789123456789";
Convert.ToInt32(string)
Este método converte uma string em um número inteiro de 32 bits equivalente. Se executarmos as conversões acima, teremos:
int result;
result = Convert.ToInt32(s1); //-- 1234
result = Convert.ToInt32(s2); //-- FormatException
result = Convert.ToInt32(s3); //-- 0
result = Convert.ToInt32(s4); //-- OverflowExceptionInt32.Parse(string)
Mesma ação do Convert.ToInt32, mas temos uma pequena diferença. Veja na execução da conversão de nossas strings:
int result;
result = Int32.Parse(s1); //-- 1234
result = Int32.Parse(s2); //-- FormatException
result = Int32.Parse(s3); //-- ArgumentNullException
result = Int32.Parse(s4); //-- OverflowExceptionA única diferença entre as duas formas de converter, é que se eu passar uma string nula, o Convert.ToInt32 vai retornar o valor inteiro 0, mas o Int32.Parse vai gerar uma excessão do tipo ArgumentNullException.
Isto é bom e últil em alguns casos que precisamos obrigar o usuário a enviar um número inteiro e se ele tentar string, por segurança (mesmo não sendo uma ação recomendada), o sistema gerar uma excessão pra ele.
Uma alternativa também, é utilizarmos o método Int32.TryParse, que tenta converter uma string para inteiro e caso não consiga, retorna o valor booleano false. Por exemplo:
success = Int32.TryParse(s1, out result); //-- success => true; result => 1234
success = Int32.TryParse(s2, out result); //-- success => false; result => 0
success = Int32.TryParse(s3, out result); //-- success => false; result => 0
success = Int32.TryParse(s4, out result); //-- success => false; result => 0 O bom é que não é gerado nenhuma excessão e podemos tratar facilmente este erro com um simples IF.
É isso pessoal.
Até a próxima.

![]() |
CodigoFonte.net » CodigoFonte.eti.br » Procurando o que comprar? » MeuMural.com.br » Todos os Direitos Reservados © 2002/2008 |
Procurando Notebooks, Câmeras Digitais, iPhones?