C# - Diferença entre int.Parse() e int.TryParse()
No artigo de hoje vou mostrar as diferenças entre int.Parse() e int.TryParse(). |
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - Usando expressões lambdas para os delegates ... - Macoratti