Catch, poignée, puis réémettre Exception?
-
20-08-2019 - |
Question
Je suis tombé sur un intéressant dilemme aujourd'hui. J'ai une fonction qui gère les informations et vérifie les valeurs en double, puis retourne le numéro suivant qui est pas un doublon. Donc, j'ai quelque chose comme ceci:
Public Function GetNextNonDuplicateNumber(NumberToCheck as Long) as Long
//the non-duplicate the function will return
Dim NonDuplicate as Long
If CheckForDuplicate(NumberToCheck) = True Then
Throw New DuplicateException()
Else
NonDuplicate = NumberToCheck
End If
End Function
Ensuite, au bas de la fonction que j'ai un bloc catch qui gère le double par incrémenter jusqu'à ce que je n'ai pas un doublon plus, comme ceci:
Catch ex as DuplicateException
NonDuplicate = IncrementToNonDuplicateValue(NumberToCheck)
Throw ex
Return NonDuplicate
End Function
Comme vous pouvez le voir, je veux gérer l'exception spécifiquement, mais je veux aussi jeter quand je suis fait parce que je veux alerter tout autre code en dehors de la fonction.
Le problème est que tout simplement jeter sa sortie de la fonction d'une valeur null
. Est-ce que je pense à une mauvaise façon la try/catch
, ou est-il un moyen de contourner cela?
La solution
Si vous avez pris une exception et récupéré (avec votre IncrementToNonDuplicate ...) alors il n'y a aucune raison de lancer une exception plus. Code entre les prises et essayer final devrait juste nettoyer les ressources comme la fermeture d'un fichier ou datareader si vous relancera il.
Vous pouvez plutôt retourner une structure qui contient une valeur NonDuplicate et les renseignements requis sur les erreurs en fonction. Autre moyen serait de lancer une exception personnalisée qui contiendra des informations telles que « nombre incorrect: il devrait être ...)
Autres conseils
Vous pouvez retourner un booléen indiquant si un doublon, et changer le paramètre à passer par référence dans de sorte que vous pouvez mettre à jour la valeur.
Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean