我今天遇到了一个有趣的两难境地。我有一个处理信息和检查重复值的函数,然后返回下一个数字,是不是重复。所以,我有这样的事情:

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

然后,在我有一个catch块通过递增直到我没有复制任何更多,处理一式两份的函数的底部是这样的:

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

正如你所看到的,我想特别处理异常,但我也想扔掉它,当我这样做,因为我想在函数外部提醒其他代码。

的问题是,简单地把它扔离开出与null值的函数。我在思考一个try/catch走错了路,或者是有办法解决?

有帮助吗?

解决方案

如果你捕获的异常,并恢复它从(与你的IncrementToNonDuplicate ...),那么没有理由抛出一个异常了。捕捉和结束试之间的代码应该只是清理资源,如关闭文件或DataReader的,如果你将重新抛出。

您可以相当返回一个包含非重复值,并要求有关函数错误信息的结构。 另一个方法是先抛出一个自定义异常,将含有“无效号码信息:它应该是...)

其他提示

可以返回一个布尔值指示是否重复被发现,并且将参数变更为通过引用传递在这样你就可以更新该值。

Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top