Olá! Thursday, 28 de March de 2024.



Dicas CódigoFonte.net
Thursday, 21 de August de 2008

Convert.ToInt32 vs Int32.Parse

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); //-- OverflowException

Int32.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); //-- OverflowException

A ú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.


Comentários do artigo [Novo comentário]

Nenhum comentário, seja o primeiro a comentar.
Para adicionar um comentário você deve efetuar o login


Gostou do CódigoFonte.net? Quer indicar a um amigo?
Preencha os campos a seguir.
Seu Nome:
Seu E-mail:
E-mail de seu Amigo:


CodigoFonte.net » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010