Você está na página 1de 2

Conteúdo

C#
Adicionar a Meu favorito
Quinta Feira, 21 de Agosto 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:

1. string s1 = "1234";
2. string s2 = "1234.65";
3. string s3 = null;
4. 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:

1. int result;
2. result = Convert.ToInt32(s1); //-- 1234
3. result = Convert.ToInt32(s2); //-- FormatException
4. result = Convert.ToInt32(s3); //-- 0
5. 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:

1. int result;
2. result = Int32.Parse(s1); //-- 1234
3. result = Int32.Parse(s2); //-- FormatException
4. result = Int32.Parse(s3); //-- ArgumentNullException
5. 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:

1. success = Int32.TryParse(s1, out result); //-- success


=> true; result => 1234
2. success = Int32.TryParse(s2, out result); //-- success
=> false; result => 0
3. success = Int32.TryParse(s3, out result); //-- success
=> false; result => 0
4. 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.

Você também pode gostar