Frage

Ich lief in ein interessantes Dilemma heute. Ich habe eine Funktion, die Informationen und prüft, ob doppelte Werte behandelt, dann gibt die nächste Nummer, die kein Duplikat ist. Also, ich habe so etwas wie folgt aus:

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

Dann an der Unterseite der Funktion ich einen catch-Block haben, der die doppelte Griffe durch Erhöhen, bis ich nicht habe ein Duplikat nicht mehr, wie folgt aus:

Catch ex as DuplicateException
   NonDuplicate = IncrementToNonDuplicateValue(NumberToCheck)
   Throw ex
   Return NonDuplicate
End Function

Wie Sie sehen können, möchte ich die Ausnahme speziell zu handhaben, aber ich mag auch, es werfen, wenn ich fertig bin, weil ich außerhalb der Funktion eines anderen Code alarmieren.

Das Problem ist, dass es einfach zu werfen mit einem null Wert aus der Funktion beendet. Bin ich etwa ein try/catch die falsche Art und Weise zu denken, oder gibt es eine Möglichkeit, um dies?

War es hilfreich?

Lösung

Wenn Sie eine Ausnahme und erholte sich von ihr gefangen (mit Ihrem IncrementToNonDuplicate ...), dann gibt es keinen Grund, eine Ausnahme mehr zu werfen. Code zwischen Fang und Ende sollte versuchen, nur die Ressourcen reinigen wie eine Datei oder einen Datareader schließen, wenn Sie es erneut auslösen.

Sie könnten eher eine Struktur zurück, die NonDuplicate Wert enthält und die erforderlichen Informationen über Fehler in der Funktion. Andere Möglichkeit wäre, um eine benutzerdefinierte Ausnahme auslösen, die Informationen wie „Ungültige Nummer enthalten wird: Es sollte ...)

Andere Tipps

Sie können eine boolean zurückgeben angibt, ob ein Duplikat gefunden wird, und die Parameter ändern übergaben unter Bezugnahme auf, so dass Sie den Wert aktualisieren.

Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top