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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top