Какова лучшая альтернатива «При ошибке возобновить дальше» для C #? - PullRequest
13 голосов
/ 28 января 2011

Если я добавлю пустые блоки catch для своего кода C #, это будет эквивалентно выражению VB.NET «On Error Resume Next».

try
{
    C# code;
}

catch(exception)
{
}

Я спрашиваю об этом потомуЯ должен преобразовать код VB.NET в C #, и старый код содержит ~ 200 операторов «On Error Resume Next», хотя я использую правильный try {} catch {} в своем новом коде, но есть ли лучшая альтернатива?

Ответы [ 11 ]

0 голосов
/ 21 декабря 2017

Я старая шляпа на VB6.Сначала короткий урок ...

Есть причины использовать On Error Resume Next.В основном для удобства чтения.В VB6 у вас есть два способа реализовать перехват ошибок.Вы можете использовать «inline» On Error Resume Next, как это.

On Error Resume Next
<something that may throw an error>
If Err.Number <> 0 Then
   <do something about this specific line of code>
   Err.Clear()
End If

Или вы можете увидеть это:

Sub DoSomething

   On Error Goto Handler1
   <do something that causes an error>

   On Error Goto Handler2
   <do something that may cause an error>

   Exit Sub

   Handler1:
   <log error or something>
   Resume Next

   Handler2:
   <log error or something>
   Resume Next

End Sub  

Но в старом коде VB6 вы, вероятно, также увидите это...

Sub PerformThis
On Error Resume Next

End Sub

Независимо от того, что довольно просто преобразовать эти случаи в Try Catch ... Если вам нужно обработать ошибку, используйте быстрый "встроенный" вид On Error Resume Next, просто сделайте это..

try { _objectinfo.Add(_object.attribute1); } catch (Exception _e) { }

Вы можете также поднять попытку try для вызывающей подпрограммы, инкапсулировав код в подпрограмму ... Так что, если вам нужно поглотить всю подпрограмму, сделайте это ...

try { PerformAction(); } catch (Exception _e) { }

Сделайте это в том случае, если подпрограмма PerformAction () содержит возобновление при ошибке Далее в верхней части кода, используйте Try Catch в вызывающей подпрограмме

Удачи ...

...