为什么从此If语句获取此NullObjectReference异常?

时间:2018-06-22 12:46:35

标签: vb.net if-statement exception

我正在VB.Net中开发一个程序,并且在运行时弹出一些我不太了解的错误。首先,我将向您展示导致我的异常抛出的代码块:

Public Sub AddPartToOrder(ByVal partNum As String, ByVal quantity As Integer)
    Using dbContext As New Data_LINQDataContext
        If IsNothing(Supplier) Or Supplier.Equals("") Then
            'Code here
        End If
    End Using
End Sub

If语句中引发了异常,其中Supplier是NullReferenceException。现在,当我将代码更改为:

Public Sub AddPartToOrder(ByVal partNum As String, ByVal quantity As Integer)
    Using dbContext As New Data_LINQDataContext
        If IsNothing(Supplier) Then
            'Code here
        ElseIf Supplier.Equals("") Then
            'More Code here
        End If
    End Using
End Sub

例外消失了。我的问题是,为什么我在第一个实例中而不是第二个实例中得到异常?如果第一个If语句的第一个条件为假,则不是仅检查第二个条件吗?它不应该与If/ElseIf一样工作吗?

2 个答案:

答案 0 :(得分:4)

将其更改为:

If IsNothing(Supplier) OrElse Supplier.Equals("") Then

您的上一个表达式意味着无论语句的前半部分是否为真,都会对Supplier.Equals(“”)进行求值。因此,它会被评估并产生错误。

OrElse件表示如果上半部为真,则完全不评估下半部。语言构造。

答案 1 :(得分:0)

如果供应商为Nothing,则无法将其与空字符串进行比较,即使第一个语句已经为假,这两个语句也会被求值。