Нулевая ссылка Исключение при проверке строки на ноль? - PullRequest
0 голосов
/ 15 декабря 2011

У меня довольно простой кусок кода:

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? (Nullable Int) в классе PurchaseDelivery. Я не вижу, что может быть причиной этой ошибки, почему она возвращает ошибку?

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

_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
1 голос
/ 15 декабря 2011

Согласно коду (в 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
0 голосов
/ 09 января 2012

В конце концов я нашел ответ на свою проблему. Класс, вызвавший ошибку, возвращал неправильный номер строки в исключении. Понятия не имею почему.

Любое исключение в этом файле возвращает номер строки, который на 1 меньше, чем код, вызвавший исключение, поэтому нулевая ссылка находится на следующей строке. Я понятия не имею, почему это происходит, я удалил все пробелы в файле и перекомпилировал и посмотрю, не вызывает ли это проблему.

Спасибо всем за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...