O framework da Microsoft, o .net, permite a conversão de variáveis do tipo string para número inteiro com a da linguagem de programação cSharp (C#) por meio dos métodos abaixo:
Para entender quais situações que podem ocorrer uma exceção ao converter uma variável do tipo string para número inteiro em tempo de execução, é preciso entender o processo de conversão.
Como Converter uma variável String para Número Inteiro com C#
A conversão de variável do tipo string para o tipo de número inteiro do equivalente a 32-bit, apenas aplique o método conforme segue no exemplo abaixo:
- Método System.ConvertTo.Int32(string)
int numero = 0;
numero = ConvertTo.Int32("1982");
return numero; - Método System.Int32.Parse(string)
int numero = 0;
numero = Int32.Parse("1982");
return numero;
Nos exemplos a seguir vamos definir as seguintes variáveis e valores para entender a possível exceção e o tratamento da exceção.
- n1 = “1982”
- n2 = “1982.11”
- n3 = null
- n4 = “2147483648”
System.Convert.ToInt32(string)
Este método converte uma string em um número inteiro de 32 bits equivalente. Ao executarmos as conversões a seguir com as variáveis n1, n2, n3 e n4, teremos:
int numero;
numero = Convert.ToInt32(n1); //-- 1982 \o Sucesso /
numero= Convert.ToInt32(n2); //-- FormatException # Exceção
numero = Convert.ToInt32(n3); //-- 0 \o Sucesso /
numero = Convert.ToInt32(n4); //-- OverflowException # Exceção
System.Int32.Parse(string)
Mesma ação do System.Convert.ToInt32, porem há uma diferença com relação a execução da conversão de argumento nulo, no método Int32.Parse(null) retorna a exceção ArgumentNullException.
int numero;
numero = Int32.Parse(s1); //-- 1982 \o Sucesso/
numero = Int32.Parse(s2); //-- FormatException # Exceção
numero = Int32.Parse(s3); //-- ArgumentNullException # Exceção
numero = Int32.Parse(s4); //-- OverflowException # Exceção
Como tratar exceção ao converter string para número inteiro
Para tratar a exceção, verifique os argumentos FormatException ou OverflowException, por meio do bloco try/catch.
int numero;
string entrada = "19821102";
string erro = "";
try{numero= Convert.ToInt32(entrada);}
catch (FormatException e){erro = "A entrada de texto não é uma sequencia de dígitos";}
catch (OverflowException e){erro = "Este valor é maior que 2 147 483 647 e não cabe Int32.";}
return numero;
Tratamento de Exceção com o método Int32.TryParse(string)
Outra alternativa é utilizarmos o método Int32.TryParse, que tenta converter uma string para inteiro e caso não consiga, retorna o valor booleano false.
bool successo;
successo = Int32.TryParse(n1, out numero); //-- successo = true; numero= 1982
successo= Int32.TryParse(n2, out numero); //-- successo = false; numero= 0
successo= Int32.TryParse(n3, out numero); //-- successo = false; numero= 0
successo= Int32.TryParse(n4, out numero); //-- successo = false; numero= 0
Conclusão
A única diferença entre as duas formas de converter string para número inteiro ao passar uma string nula, o método Convert.ToInt32(string) retorna o valor inteiro 0, porem o Int32.Parse(string) gera a exceção do tipo ArgumentNullException. Isso se faz útil para garantir que, em determinada classe que possua uma propriedade do tipo número inteiro, a obrigar a valorização do campo.
A excelente idéia de tratar a exceção ao converter string para número inteiro por meio do método o System.Int32.TryParse(string) é que o retorno boleano torna simples e fácil a validadação da conversão com um simples if.
Referências
- Difference Between Int32.Parse(), Convert.ToInt32(), and Int32.TryParse()
- How to: Convert a string to an int (C# Programming Guide) – Origem: msdn.microsoft.com
- Convert.ToInt32 Method (String) – Origem: msdn.microsoft.com
- Método Convert.ToInt32 (String, Int32) – Origem: msdn.microsoft.com
- Método Int32.Parse – Origem: msdn.microsoft.com
- Método Int32.TryParse (String, Int32%) – Origem: msdn.microsoft.com
2 Respostas
Eduardo
Obrigado. Ótimo post sobre Como Tratar Exceção ao Converter String para Número Inteiro (Int32) com C#
Diego Peres
Artigo muito bom, ajudou bastante aqui. Obrigado e continue com o ótimo trabalho 🙂