我正在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
一样工作吗?
答案 0 :(得分:4)
将其更改为:
If IsNothing(Supplier) OrElse Supplier.Equals("") Then
您的上一个表达式意味着无论语句的前半部分是否为真,都会对Supplier.Equals(“”)进行求值。因此,它会被评估并产生错误。
OrElse件表示如果上半部为真,则完全不评估下半部。语言构造。
答案 1 :(得分:0)
如果供应商为Nothing,则无法将其与空字符串进行比较,即使第一个语句已经为假,这两个语句也会被求值。