Nel complesso, l'utilizzo di try / catch è deprecato, poiché il blocco catch è così costoso dal punto di vista delle risorse. L'utilizzo di Try / catch mi ricorda la gestione del rischio . 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 piano che ti cade in testa da qualche parte mentre è così improbabile che accada (forse 0,001%), ma può ucciderti.
La gestione delle eccezioni è così. Try block non è costoso. Ma il blocco catch è davvero costoso, perché deve creare una tabella di stack stack e fare altre cose. Pertanto, nel prendere una decisione sui blocchi try / catch, dovresti considerare quante volte probabilmente colpisci il blocco catch. Se tra 10.000 usi, lo colpisci solo 1 volta, quindi utilizzalo. Ma se si tratta di un modulo e l'utente probabilmente non lo riempie correttamente per il 50% di volte, allora dovresti evitare di mettere in atto un blocco try / catch.
Nei luoghi in cui la probabilità di verificarsi di un'eccezione è elevata, si consiglia di utilizzare i if {} else {}
blocchi per evitare il verificarsi di eccezioni. Ad esempio, dove si desidera dividere due numeri, anziché 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.
}