Nel complesso, l'utilizzo di try / catch è deprecato, perché il blocco catch è così costoso dal punto di risorse. L'utilizzo / rilevamento dell'utilizzo mi ricorda gestione dei rischi . La gestione dei rischi ha due dimensioni:
- La probabilità che si verifichi un rischio
- Il danno che può avere
Ora, se esci di casa, un pianostrong ti cade in testa da qualche parte mentre è così improbabile che accada (forse lo 0,001%), ma può ucciderti.
La gestione delle eccezioni è così. Prova a bloccare non è costoso. Ma il blocco catch è molto costoso, perché è necessario creare una tabella di stack trace e fare altre cose. Pertanto, nel prendere una decisione sui blocchi try / catch, dovresti considerare quante volte hai colpito il blocco catch. Se tra 10.000 usi, lo colpisci solo 1 volta, quindi usalo. Ma se è un modulo e l'utente probabilmente non lo riempie correttamente il 50% delle volte, allora dovresti evitare di mettere in azione un blocco try / catch.
Nei luoghi in cui la probabilità di verificarsi di un'eccezione è elevata, si consiglia di utilizzare i blocchi if {} else {}
per evitare il verificarsi di un'eccezione.
Ad esempio, dove vuoi dividere due numeri, invece di scrivere:
try
{
int result = a/b;
}
catch (DivisionByZeroException ex)
{
// Showing a message here, and logging of course.
}
dovresti scrivere:
if (b == 0)
{
int result = a/b;
}
else
{
// Showing a message to user to change the value of b, etc.
}