No geral, o uso de try / catch é obsoleto, porque o bloco de catch é muito caro do ponto de vista dos recursos. O uso try / catch me lembra o gerenciamento de riscos . O gerenciamento de riscos tem duas dimensões:
- A probabilidade de risco acontecer
- O dano que isso pode ter
Agora, se você sair de casa, um piano caindo sobre sua cabeça em algum lugar é muito improvável que isso aconteça (talvez 0,001%), mas pode matá-lo.
O tratamento de exceções é assim. Tente bloco não é caro. Mas o bloco catch é realmente caro, porque precisa criar uma tabela de rastreamento de pilha e fazer outras coisas. Portanto, ao tomar uma decisão sobre os blocos try / catch, considere quantas vezes você provavelmente bate no bloco catch. Se entre 10.000 usos, você o acertar apenas 1 vez, use-o. Mas, se for um formulário, e o usuário provavelmente não o preencher corretamente 50% vezes, evite colocar um bloco try / catch em ação lá.
Em locais onde a probabilidade de ocorrência de exceções é alta, é recomendável usar if {} else {}
blocos para evitar a ocorrência de exceções. Por exemplo, onde você deseja dividir dois números, em vez de escrever:
try
{
int result = a/b;
}
catch (DivisionByZeroException ex)
{
// Showing a message here, and logging of course.
}
você deve escrever:
if (b == 0)
{
int result = a/b;
}
else
{
// Showing a message to user to change the value of b, etc.
}