捕获,处理,然后Rethrow例外?

时间:2009-06-26 19:40:06

标签: vb.net exception try-catch structured-exception

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

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

2 个答案:

答案 0 :(得分:3)

如果你发现异常并从中恢复(使用IncrementToNonDuplicate ......),则没有理由再抛出异常。 catch和end try之间的代码应该只是清理资源,如关闭文件或datareader,如果你要重新抛出它。

您可能更愿意返回包含NonDuplicate值的结构以及有关函数中错误的必需信息。 其他方法是抛出一个自定义异常,其中包含“无效数字:它应该......”等信息

答案 1 :(得分:1)

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

Public Function GetNextNonDuplicateNumber(ByRef NonDupeNumber as Long) as Boolean