1

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

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错误的方法,还是有办法解决这个问题?

4

2 回答 2

3

如果您捕获了异常并从中恢复(使用您的 IncrementToNonDuplicate ...),那么就没有理由再抛出异常了。catch 和 end try 之间的代码应该只清理资源,例如关闭文件或数据读取器(如果您要重新抛出它)。

您宁愿返回一个包含 NonDuplicate 值和有关函数错误所需信息的结构。另一种方法是抛出一个自定义异常,该异常将包含诸如“无效号码:它应该是......)之类的信息

于 2009-06-26T20:18:28.900 回答
1

您可以返回一个布尔值,指示是否找到重复项,并更改要通过引用传入的参数,以便您可以更新值。

Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean
于 2009-06-26T21:26:19.073 回答