Domanda

Mi sono imbattuto in un dilemma interessante oggi. Ho una funzione che gestisce le informazioni e controlli per i valori duplicati, quindi restituisce il numero successivo che non è un duplicato. Così, ho qualcosa di simile:

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

Poi in fondo della funzione ho un blocco catch che gestisce il duplicato incrementando fino a quando non ho un duplicato più, in questo modo:

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

Come si può vedere, voglio gestire l'eccezione in particolare, ma voglio anche gettarlo quando ho finito perché voglio avvisare altro codice di fuori della funzione.

Il problema è che semplicemente buttare esce dalla funzione con un valore null. Sto pensando ad un try/catch nel modo sbagliato, o c'è un modo per aggirare questo?

È stato utile?

Soluzione

Se hai preso un'eccezione e recuperato da esso (con l'IncrementToNonDuplicate ...) allora non c'è ragione per gettare più un'eccezione. Codice tra cattura e prova finale dovrebbe solo pulire le risorse come la chiusura di un file o DataReader se si vuole rigenerare esso.

Si potrebbe piuttosto restituire una struttura che contiene il valore NonDuplicate e ha richiesto informazioni sugli errori nella funzione. Altro modo sarebbe quello di un'eccezione personalizzato che conterrà informazioni come quot; Numero non valido &: Dovrebbe essere ...)

Altri suggerimenti

È possibile restituire un valore booleano che indica se un duplicato viene trovato, e modificare il parametro da passare in per riferimento in modo da poter aggiornare il valore.

Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top