vb.net if else逻辑流程错误

时间:2013-10-02 19:35:02

标签: asp.net vb.net if-statement logic

我正在调试ASP.net Web应用程序项目中的一些代码。

我有一个嵌套在Try / Catch块中的If / Else语句。只要在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

这怎么可能?

3 个答案:

答案 0 :(得分:2)

听起来你正在使用调试器,而优化仍然打开。这可能导致步骤追踪以看似不合逻辑甚至不可能的方式行事。这是因为在优化器移动代码和变量并合并不同的语句之后,源代码行和可执行指令之间不再存在简单或直接的关系。

答案 1 :(得分:1)

听起来你正在调试的代码可能与正在执行的代码不同步。尝试重建整个解决方案。

答案 2 :(得分:0)

我认为你可能错了:

在简单的vb .net winforms程序中尝试以下操作。

Public Class Form1

   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      Try
         Dim doIt As Boolean = True
         If doIt Then
            Throw New Exception("throwing that stuff")
         Else
            MsgBox("in here - how did that happen?")

         End If
      Catch ex As Exception
         MsgBox(String.Format("That makes sense.  Exception is: {0}", ex))
      End Try


   End Sub
End Class