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 => 0O 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 » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010 |