как заменить Dot Net ErrObject на try catch - PullRequest
0 голосов
/ 11 декабря 2018

Я перенес ниже строки кода на Vb.net, и я заменяю On Error GoTo блоком try catch.таким образом, в приведенном ниже коде, если есть какая-либо ошибка, оператор перейдет к метке ErrorHandler: метка, где он будет сравнивать точечную сеть ErrObject.error с дублирующимся ключом.если есть какой-либо дублирующий ключ, строка кода продолжит выполнение следующего оператора.Как я могу заменить это на try catch?

Const DUPLICATE_KEY = 457
On Error GoTo ErrorHandler
'down below there lines of code

 ErrorHandler:
 'continue if it is a duplicate key
 If Err.Number = DUPLICATE_KEY Then    'Duplicate key
  Resume Next
 end if

1 Ответ

0 голосов
/ 22 декабря 2018

Чтобы добавить больше деталей к комментарию DaveInCraz, вот два примера, показывающие, как вы можете перенести VB6 в VB.NET:

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

Sub aSubToMigrate
    On Error GoTo ErrorHandler
   ' Down below there lines of code
ErrorHandler:
    'continue if it is a duplicate key
    Select Case Err.Number
        Case ERROR_CODE_1:      
            ' Error 1 case processing
            ' [...]
        Case ERROR_CODE_2:
            ' Error 2 case processing
            ' [...]
        Case Else:
            ' Generic error case processing
    End Select
    Resume Next
End Sub

Управление ошибками в VB.NET имеет дело с выбрасыванием объекта исключения и Try-Catch блоками.Вы можете обрабатывать отдельно каждый тип ошибки, написав блок Catch для данного типа ошибки, как показано ниже:

Sub aMigratedSub
    Try
        ' Down below there lines of code
    Catch ex As ExceptionType1
        ' Error 1 case processing
    Catch ex As ExceptionType2
        ' Error 2 case processing
    Catch ex As Exception
        ' Generic error case processing (Exception is the root class)
    End Try
    ' Code executed after (no need of Resume Next so)
End Sub

Конечно, не ожидайте всегда находить для каждого Err.Number уникальногоException class, это не биективное (однозначное) отношение.

Больше информации о блоках Try-Catch на официальном сайте Microsoft .

...