C# -  Diferença entre int.Parse() e int.TryParse()


No artigo de hoje vou mostrar as diferenças entre int.Parse() e int.TryParse().


Os métodos int.Parse() e int.TryParse() são usados para converter uma representação de string de um número em um inteiro. Simples assim.

Sintaxe :

Parse() TryParse()

  public static int Parse(string s )

   public static bool TryParse(string s,out int result  )

onde :

- s é a representação da string a ser convertida para inteiro
- result - contém o valor inteiro convertido

Segundo a documentação se a conversão falhar o tratamento é feito assim :

1- int.Parse() - lança uma exceção se a conversão falhar;

2- int.TryParse() - Se a conversão falhar retorna zero;

As exceções possíveis usando ambos os métodos são:

Exceção Condição
ArgumentNullException
 s é  null.
FormatException
 s não esta em um formato válido
OverflowException
 s esta fora da faixa dos números inteiros

O método TryParse é igual ao método Parse, exceto pelo fato de que o método TryParse não lança uma exceção se a conversão falhar. Assim ele elimina a necessidade de usar o tratamento de exceções para testar uma FormatException no caso em que s seja inválido e não pode ser analisado com sucesso.

Vamos analisar um exemplo usando int.Parse() :

Conversão para int usando Int.Parse() resultado
string valor1 = "100"
int valor2 = int.Parse(valor1);
 O valor é convertido sem erros.
 valor2 = 100
string valor1 =null;
int valor2 = int.Parse(valor1);
 Lança a exceção ArgumentNullException
string valor1 = "100.99";
int valor2 = int.Parse(valor1);
 Lança a exceção FormatException
string valor1 = "999999999999999999999999999999";
int valor2 = int.Parse(valor1);
 Lança a exceção OverflowException

Vamos analisar um exemplo usando int.TryParse() :

Conversão para int usando Int.TryParse() resultado
string valor1 = "100"
int resultado;
bool sucesso = int.Parse(valor1, out resultado);
 O valor é convertido sem erros.

 resultado = 1000  e sucesso = true
string valor1 = null;
int resultado;
bool sucesso = int.Parse(valor1, out resultado);
 Conversão falhou

 resultado = 0  e sucesso = false

string valor1 = "100.99"
int resultado;
bool sucesso = int.Parse(valor1, out resultado);
 Conversão falhou

 resultado = 0  e sucesso = false

string valor1 = "999999999999999999999"
int resultado;
bool sucesso = int.Parse(valor1, out resultado);
 Conversão falhou

 resultado = 0  e sucesso = false

Qual o melhor método ?

A princípio TryParse() visto que ele elimina a necessidade do tratamento de exceção para testar um FormatException no caso do valor a ser convertido ser inválido. Exemplo:

        static void usandoTryParse()
        {
            String[] valores = { null, "160519", "9432.0", "16,667","-322", "+4302", "(100);", "01FA" };
            foreach (var valor in valores)
            {
                int numero;
                bool resultado = Int32.TryParse(valor, out numero);
                if (resultado)
                {
                    Console.WriteLine("Conversão de '{0}' para {1}.", valor, numero);
                }
                else
                {
                    Console.WriteLine("A conversão de '{0}' Falhou.",valor == null ? "<null>" : valor);
                }
            }
            Console.ReadLine();
        }

Agora se você precisar saber porque e quando a conversão falhou talvez o método Parse() seja mais indicado. Veja o exemplo usando esta abordagem:

using System;
namespace CShp_TryParse
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] valores = { "+13230", "-0", "1,390,146", "$190,235,421,127",
                                "0xFA1B", "163042", "-10", "007", "2147483647",
                                "2147483648", "16e07", "134985.0", "-12034",
                                "-2147483648", "-2147483649", null };
            foreach (string valor in valores)
            {
                try
                {
                    int numero = Int32.Parse(valor);
                    Console.WriteLine("{0} --> {1}", valor, numero);
                }
                catch (FormatException)
                {
                    Console.WriteLine("{0}: Formato Inválido", valor);
                }
                catch (OverflowException)
                {
                    Console.WriteLine("{0}: Overflow", valor);
                }
                catch (ArgumentNullException)
                {
                    Console.WriteLine("{0}: Valor null", valor);
                }
            }
        }
    }
}

E estamos conversados...

"Se alguém quer vir após mim (Jesus), a si mesmo se negue, tome a sua cruz e siga-me" (Mateus 16:24).

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti