代码之家  ›  专栏  ›  技术社区  ›  Skitzafreak

为什么我要从这个if语句中获取这个nullobjectreference异常?

  •  -1
  • Skitzafreak  · 技术社区  · 7 年前

    我正在用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 声明,供应商是 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
    

    例外情况消失了。我的问题是,为什么我第一次得到例外,而不是第二次?不是第一个 如果 语句只在第一个条件为false时检查第二个条件?它不应该以同样的方式工作吗? If/ElseIf ?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Ctznkane525    7 年前

    更改为:

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

    您前面的表达式意味着无论是语句的前半部分是否为真,都可以评估供应商。因此,它被评估并产生错误。

    orelse的意思是,如果上半部分是真的,那么下半部分根本就不计算。一种语言结构。

        2
  •  0
  •   Alessandro Mandelli    7 年前

    如果supplier为零,则不能将其与空字符串进行比较,即使第一个语句已经为false,也将计算这两个语句。