我有一段相当简单的代码:
Private _PurchaseDelivery as PurchaseDelivery
Protected Overrides Sub InsertItem(ByVal index As Integer, ByVal item As PurchaseDeliveryItem)
Dim SKUBin As SKUBin
If _PurchaseDelivery IsNot Nothing AndAlso _PurchaseDelivery.DefaultSKUBinID.HasValue Then
SKUBin = item.StockOrderUnit.SKU.SKUBins.GetByBinID(_PurchaseDelivery.DefaultSKUBinID.Value)
item.SKUBin = SKUBin
End If
MyBase.InsertItem(index, item)
End Sub
在一个覆盖自定义列表库的类中。当在生产中使用时,代码偶尔抛出一个未处理的异常System.NullReferenceException
:
If _PurchaseDelivery IsNot Nothing AndAlso _PurchaseDelivery.DefaultSKUBinID.HasValue Then
DeafultSKUBinID在Integer?
类中声明为PurchaseDelivery
(Nullable Int)。我看不出可能导致此错误的原因,为什么会返回错误?
答案 0 :(得分:1)
根据代码(在OP中)代码段PurchaseDelivery
未实例化(可能是在某处创建的)。您可以尝试更改if语句,如:
Protected Overrides Sub InsertItem(ByVal index As Integer, ByVal item As PurchaseDeliveryItem)
Dim SKUBin As SKUBin
If IsNothing(_PurchaseDelivery) Then
Exit Sub
End If
If IsNothing(_PurchaseDelivery.DefaultSKUBinID) Then
Exit Sub
End If
If _PurchaseDelivery.DefaultSKUBinID.HasValue Then
SKUBin = item.StockOrderUnit.SKU.SKUBins.GetByBinID(_PurchaseDelivery.DefaultSKUBinID.Value)
item.SKUBin = SKUBin
End If
MyBase.InsertItem(index, item)
End Sub
答案 1 :(得分:1)
_PurchaseDelivery.DefaultSKUBinID什么都没有。
Private _PurchaseDelivery as PurchaseDelivery
Protected Overrides Sub InsertItem(ByVal index As Integer, ByVal item As PurchaseDeliveryItem)
Dim SKUBin As SKUBin
If _PurchaseDelivery IsNot Nothing AndAlso _PurchaseDelivery.DefaultSKUBinID isnot nothing andalso _PurchaseDelivery.DefaultSKUBinID.HasValue Then
SKUBin = item.StockOrderUnit.SKU.SKUBins.GetByBinID(_PurchaseDelivery.DefaultSKUBinID.Value)
item.SKUBin = SKUBin
End If
MyBase.InsertItem(index, item)
End Sub
答案 2 :(得分:0)
我最终找到了自己问题的答案。导致错误的类在异常中返回错误的行号。我不明白为什么。
此文件中的任何异常都会返回一个行号,该行号比引起异常的代码少1,因此空引用位于下一行。我不知道为什么会发生这种情况,我已经删除了文件中的所有空格并重新编译,并查看是否会导致问题消失。
感谢大家的帮助。