Я отлаживаю некоторый код в проекте веб-приложения ASP.net.vb.net if else ошибка логического потока
У меня есть оператор If/Else, вложенный в блок Try/Catch. Всякий раз, когда ошибка возникает внутри блока If, а не сразу переходит в блок Catch, он попадает в блок Else.
Я неоднократно перешагивал код, чтобы засвидетельствовать это. Когда я делаю исключение в блоке if, я ожидаю, что логика перетекает в блок catch, и я бы никогда не ожидал увидеть, что блок if попал, а затем блок else получит удар, который, кажется, полностью лишает цель логика if/else.
Вот код в вопросе:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
LoadDocument()
End Sub
Private Sub LoadDocument()
Dim taDocuments As New SecureTableAdapters.IndividualDocumentsTableAdapter
Dim dtDocuments As New Secure.IndividualDocumentsDataTable
Dim iDocumentID As Integer = CInt(Request.QueryString("iDocumentID"))
Dim sFileName As String
Dim isMac As Boolean = clsApplication.isMac(Request.Browser.Platform)
Dim bDownloaded As Boolean = False
Try
If taDocuments.FillBy_IndividualDocumentID(dtDocuments, iDocumentID) > 0 Then
Dim oRow As Secure.IndividualDocumentsRow = dtDocuments.Rows(0)
sFileName = "Statement-" & oRow.sFileNumber & ".pdf"
If oRow.sDocumentName.ToUpper.Contains("LEDES") Or oRow.sDocumentName.ToUpper.Contains("TEXT") Then
sFileName = sFileName.Replace("pdf", "txt")
End If
Dim b As Byte() = Nothing
If oRow.IsbExtractedNull = False AndAlso oRow.bExtracted Then
Dim sHost As String = "206.220.201.175"
Dim sPath As String = String.Format("/Legacy/{0}/{1}/{2}.pdf", oRow.iFirmID.ToString, "Individuals", oRow.iIndividualDocumentID.ToString)
b = DownloadDocument(sHost, sPath)
If b Is Nothing Then
'When this line is hit, logic jumps to the else block with the comment below
Throw New Exception("FTP Download Failed")
Else
bDownloaded = True
End If
Else
bDownloaded = False
End If
If bDownloaded = False Then
b = getImage(iDocumentID, "oPDF", "iIndividualDocumentID", "tblIndividualDocuments")
If b Is Nothing Then
Throw New Exception
End If
End If
If isMac Then
Response.ContentType = "application/x-macbinary"
Else
Response.ContentType = "application/octet-stream"
End If
Response.Expires = 0
Response.AddHeader("Content-Disposition", "attachment; filename=""" & sFileName & """")
Response.BinaryWrite(b)
Else
'--->When the exception occurs, logic jumps to this else block
Throw New Exception
End If
Catch ex As Exception
Response.Write("Sorry, that statement could not be located. Please try again, or call us at xxx.xxx.xxxx for further information.")
clsApplication.EmailError("An error occurred downloading a statement: " & vbCrLf & ex.Source & vbCrLf & ex.Message & vbCrLf & ex.StackTrace)
End Try
End Sub
Как это возможно?
У вас отключены оптимизаторы для отладки? – RBarryYoung
RBarryYoung - Нет, и это оказалось проблемой. У меня была полная отладка, а также была включена оптимизация. Я читал, что включение этой опции может вызвать сложную отладку, но я понятия не имел, что это может изменить основной поток логики языка. Если бы это было что-то, что вызвало отладку, это было бы одно, но я обнаружил, что это происходит и при публикации. Таким образом, казалось бы, что оптимизация очень опасна. – Josh
Хорошая работа RBarryYoung. Вы должны опубликовать это как ответ и получить полный кредит :) Я рад слышать, что проблема решена, и я узнал что-то новое :) – Derek