как заменить On Error Resume Next на try catch - PullRequest
0 голосов
/ 11 октября 2018

Я перенес несколько элементов управления из 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 голосов
/ 11 октября 2018

on error resume next неприятно, когда вам нужно преобразовать код из vb6 в .net.

По сути, это означает просто игнорировать любую ошибку, которая следует за ней, и продолжать выполнение кода прямо из строки кода.после того, который выкинул ошибку.

В .Net выполнение эквивалентных действий будет означать, что каждая строка после того, где был on error resume next, должна быть заключена в блок try...catch с пустым уловом.

Очевидно, что это не практично и не является хорошей практикой (на самом деле, это очень плохая практика глотать исключения).

К счастью для всех, кто переводит код, не каждая строка можетвыбросить исключение.
Вам необходимо изолировать опасные зоны в переведенном коде и заключить их в try...catch.

Я бы порекомендовал не проглатывать исключения, а распространять их там, где они могут быть обработаны.- поэтому я советую сделать рефакторинг вместо того, чтобы просто переводить.

...