Pregunta

Hoy me encontré con un interesante dilema. Tengo una función que maneja la información y verifica los valores duplicados, luego devuelve el siguiente número que no es un duplicado. Entonces, tengo algo como esto:

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

Luego, en la parte inferior de la función, tengo un bloque catch que maneja el duplicado incrementándolo hasta que ya no tengo un duplicado, como este:

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

Como puede ver, quiero manejar la excepción específicamente, pero también quiero lanzarla cuando termine porque quiero alertar a otro código fuera de la función.

El problema es que simplemente arrojarlo sale de la función con un valor null. ¿Estoy pensando en un try/catch de forma incorrecta, o hay alguna forma de evitarlo?

¿Fue útil?

Solución

Si captó una excepción y se recuperó de ella (con su IncrementToNonDuplicate ...), entonces ya no hay razón para lanzar una excepción. El código entre catch y end try solo debe limpiar los recursos como cerrar un archivo o un lector de datos si lo va a volver a lanzar.

Preferiría devolver una estructura que contenga un valor no duplicado y la información requerida sobre los errores en la función. Otra forma sería lanzar una excepción personalizada que contendrá información como & Quot; Número inválido: debería ser ...)

Otros consejos

Puede devolver un valor booleano que indique si se encuentra un duplicado y cambiar el parámetro que se pasará por referencia para que pueda actualizar el valor.

Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top