我已经将少量控件从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
有没有比以上更好的方法了?
答案 0 :(得分:2)
on error resume next
令人讨厌。
从根本上讲,这意味着只需忽略它之后发生的任何错误,并在引发错误的代码行之后立即从代码行继续执行代码。
在.Net中,进行等效操作意味着将on error resume next
之后的每一行都包装在try...catch
块中,并保留空白。
显然,这既不切实际也不是好习惯(实际上,吞下异常是非常糟糕的习惯)。
幸运的是,每个翻译代码的人,并非每一行都可能引发异常。
您需要在已翻译的代码中隔离危险区域,并仅将它们包裹在try...catch
中。
我建议不要吞下异常,而是将其传播到可以处理的地方-因此,我的建议是进行重构,而不仅仅是翻译。