如何用try catch替换On Error Resume Next

时间:2018-10-11 18:33:22

标签: vb.net vb6-migration

我已经将少量控件从Vb6迁移到VB.Net,并且只读属性之一具有“ On Error Resume Next”,因此该属性不会引发任何错误,并且将始终返回一个值。现在,我已经用try catch替换了,我想让你们认为try catch实现是否适用还是需要进行任何更改。下面我提到了原始代码以及尝试捕获实现代码。

原始向导迁移的代码

Public ReadOnly Property TotalAmount() As String
    Get
        'On Error Resume Next
        Dim intIndex As Short
        Dim numFS As Short
        Dim totalAmount As Double
        With m_udtProperties_READ   

        numFS = CShort(UBound(m_udtProperties_READ.FundSource))  

            If numFS >= 0 Then
                For intIndex = 0 To numFS

 totalAmount = totalAmount +      
CDbl(m_udtProperties_READ.FundSource(intIndex).FromSide.Amount)

                Next
            End If
            TotalAmount= CStr(totalAmount)

        End With

    End Get

尝试捕获实现代码。

    Public ReadOnly Property TotalAmount() As String
    Get

        Dim intIndex As Short
        Dim numFS As Short
        Dim totalAmount As Double
        With m_udtProperties_READ
            Try
                numFS = CShort(UBound(m_udtProperties_READ.FundSource))
            Catch ex As Exception

            End Try

            If numFS >= 0 Then
                For intIndex = 0 To numFS
                    Try
                        totalAmount = totalAmount + CDbl(m_udtProperties_READ.FundSource(intIndex).FromSide.Amount)
                    Catch ex As Exception

                    End Try
                Next
            End If
            TotalAmount = CStr(totalAmount)

        End With

    End Get
End Property

有没有比以上更好的方法了?

1 个答案:

答案 0 :(得分:2)

当您需要将代码从vb6转换为.net时,

on error resume next令人讨厌。

从根本上讲,这意味着只需忽略它之后发生的任何错误,并在引发错误的代码行之后立即从代码行继续执行代码。

在.Net中,进行等效操作意味着将on error resume next之后的每一行都包装在try...catch块中,并保留空白。

显然,这既不切实际也不是好习惯(实际上,吞下异常是非常糟糕的习惯)。

幸运的是,每个翻译代码的人,并非每一行都可能引发异常。
您需要在已翻译的代码中隔离危险区域,并仅将它们包裹在try...catch中。

我建议不要吞下异常,而是将其传播到可以处理的地方-因此,我的建议是进行重构,而不仅仅是翻译。