Como Tratar Exceção ao Converter String para Número Inteiro (Int32) com C#

postado em: Como Fazer, Programação, Web Série | 2

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

2 Respostas

  1. Obrigado. Ótimo post sobre Como Tratar Exceção ao Converter String para Número Inteiro (Int32) com C#

  2. Artigo muito bom, ajudou bastante aqui. Obrigado e continue com o ótimo trabalho 🙂

Deixe uma resposta