Parse v. TryParse
Pergunta
O que é a diferença entre Parse () e TryParse ()?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Existe alguma forma de como um try-catch de verificação de erros Block?
Solução
Parse
lança uma exceção se ele não pode analisar o valor, enquanto TryParse
retorna um bool
indicando se sucedido.
TryParse
não apenas try
/ catch
internamente - todo o ponto dele é que ele é implementado sem exceções para que seja rápido. Na verdade, a forma como é mais provável implementado é que internamente o método Parse
chamará TryParse
e, em seguida, lançar uma exceção se ele retorna false
.
Em um Parse
poucas palavras, o uso se você tem certeza que o valor será válido; Caso contrário, use TryParse
.
Outras dicas
Se a string não pode ser convertida para um número inteiro, então
-
int.Parse()
irá lançar uma exceção -
int.TryParse()
retornará false (mas não lançar uma exceção)
O método TryParse permite que você teste se algo é analisável. Se você tentar Parse como no primeiro exemplo com um int inválida, você receberá uma exceção enquanto no TryParse, ele retorna um boolean deixá-lo saber se o parse sucedido ou não.
Como nota de rodapé, passando nulo para a maioria dos métodos TryParse irá lançar uma exceção.
Parse lança uma exceção se a conversão de uma string para o tipo de dados especificado falhar, enquanto TryParse evita explicitamente lançar uma exceção.
O TryParse não retornar o valor, ele retorna um código de status para indicar se o parse sucedido (e não lançar uma exceção).
Para o registro, eu estou testando dois códigos:. Isso simplesmente tentar converter a partir de uma string para um número e se ele falhar número depois atribuir a zero
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
e
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
Para c #, a melhor opção é usar TryParse porque tentativa e captura alternativa jogado a exceção
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
Isso é doloroso lento e indesejável, no entanto, o código não parar a menos de exceção de depuração são resolvidos para parar com isso.
Eu sei que é um post muito antiga, mas pensei em compartilhar mais alguns detalhes sobre Parse vs TryParse.
Eu tinha um cenário onde DateTime precisa ser convertido para String e se datevalue nulo ou String.Empty estávamos perante uma exceção. Para superar isso, temos substituído Parse com TryParse e terá data padrão.
Código Antigo:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
Novo Código:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
tem que declarar outra variável e usado como Out for TryParse.
double.Parse ( "-"); levanta uma exceção, enquanto Double.TryParse ( "-", fora analisado); Interpreta a 0 então eu acho que TryParse faz conversões mais complexos.