我今天遇到了一个有趣的困境。我有一个处理信息和检查重复值的函数,然后返回下一个不重复的数字。所以,我有这样的事情:
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
错误的方式,还是有办法解决这个问题?
答案 0 :(得分:3)
如果你发现异常并从中恢复(使用IncrementToNonDuplicate ......),则没有理由再抛出异常。 catch和end try之间的代码应该只是清理资源,如关闭文件或datareader,如果你要重新抛出它。
您可能更愿意返回包含NonDuplicate值的结构以及有关函数中错误的必需信息。 其他方法是抛出一个自定义异常,其中包含“无效数字:它应该......”等信息
答案 1 :(得分:1)
您可以返回一个布尔值,指示是否找到重复项,并更改要通过引用传入的参数,以便您可以更新该值。
Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean