vb.net - VisualBasic : casting Exception into ErrObject

标签 vb.net exception error-handling try-catch

我将重构一些旧的VisualBasic应用程序,并出现以下情况:

Public Sub MySub ()
     Try
        ' execute dangerous operation
    Catch ex As System.Exception
        Call HandleErrors((ErrObject) ex)  ' <-- invalide cast
    End Try
End SuB

Public Sub HandleErrors(ByRef objError As ErrObject)   ' I can not easily change the signature of this sub as it gets referenced very often.
    ' process error ..
End Sub

我想重用已经存在的Sub'HandleErrors()',它使用ErrObject作为参数。但是由于使用Try and Catch更方便,所以我想传递Syste.Exception类型的Object而不是ErrObject。

问题:

有没有办法将Exception强制转换或转换为ErrObject?

最佳答案

我认为,与其尝试将异常强加到历史悠久的Visual Basic错误处理例程中,不如将更好的选择是创建HandleErrors的新重载(使原始子签名在仍使用它的地方保持不变),可能是全新的然后可以调用原始函数和新重载的函数。例如,假设您的函数当前如下所示:

Public Sub HandleErrors(ByRef objError As ErrObject)
    Log(objError.Description)
    PerformSomeGlobalCleanup()
End Sub

现在,您还希望也能够记录新样式的异常。您可以创建一个新的重载:
Public Sub HandleErrors(ByRef ex As Exception)
    Log(ex.Message)
    PerformSomeGlobalCleanup()
End Sub

但是最好让此代码共享HandleErrors实际执行的操作的底层结构和逻辑,因此您可以执行以下操作:
Private Sub InternalHandleErrors(ByVal msg as String)
    Log(msg)
    PerformSomeGlobalCleanup()
End Sub

Public Sub HandleErrors(ByRef ex As Exception)
    InternalHandleErrors(ex.Message)
End Sub

Public Sub HandleErrors(ByRef objError As ErrObject)
    'original signature, but refactored
    InternalHandleErrors(objError.Description)
End Sub

您可以将逻辑从原始HandleErrors移到InternalHandleErrors中-在处理ErrObjectException之间是很常见的。

这意味着您不会用旧式的Visual Basic对象“污染”新重构的代码,并且意味着如果/当您完成重构以删除原始功能时,没有其他引用,您不需要遍历您的整个代码库都删除了强制类型转换。

关于vb.net - VisualBasic : casting Exception into ErrObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849124/

相关文章:

python - 异常处理中的这种奇怪行为是什么?

java - 逻辑运算结果

c# - 如何在 C# Windows 窗体应用程序 (CTRl + alt +Del) 上捕获键盘笔画

c# - Double ParseDouble - 输入字符串的格式不正确 - 如何修复?

c# - 如何知道System.Windows.Forms.dll中System.InvalidOperationException的细节?

r - 如何在条形图误差条中合并SE而不是SD?另外,如何更改x轴组的顺序

php - paypal IPN php 脚本- mysql 不工作?

mysql - ODBC select 语句获取 bool 值

vb.net 获取/设置属性没有逻辑

java - 如何使用 Retrofit2 和 RxJava2 抛出自定义异常