Wyjątek NullReferenceException: "Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu"

0

Cześć,

Piszę integrację z serwisem API jednego z kurierów.
Wypakowałem plik wsdl no i mam dostepne wszystkie klasy i metody.

Zaczynam przygotowywać dane dla XML, wiec wywołuje sobie wszystko po kolei przy jednym typie cały czas wywala mi błąd NullReferenceException

  • Poprzednie dane udało mi się poprawnie załadować problem mam z typem: dataPugo.Shipment.References = new ReferenceType[2];
  • Sprawdziłem i debugowałem ale to References, Shipment i dataPugo nie są nullami a jednak cały czas mi go wywala
var dataPugo = new PUGOShipments();
dataPugo.Shipment = new ShipmentType();
dataPugo.Shipment.References = new ReferenceType[2];           

            if (dataPugo.Shipment.References == null)
            {
                MessageBox.Show("Jest nullem");
            }
            
            dataPugo.Shipment.References[0].Number = textBox1.Text.ToString();
            dataPugo.Shipment.References[1].Type = "FV"; 

Proszę o jakieś wskazówki i pozdrawiam

2

dataPugo.Shipment.References to tablica wypełniona nullami
Sprawdź dataPugo.Shipment.References[0]
musisz jeszcze zrobić dataPugo.Shipment.References[0] = new ReferenceType()

0
KamilAdam napisał(a):

dataPugo.Shipment.References to tablica wypełniona nullami
Sprawdź dataPugo.Shipment.References[0]
musisz jeszcze zrobić dataPugo.Shipment.References[0] = new ReferenceType()

Dzięki!!!!! Działa :)

powinienem też chyba stworzyć tablice z jednym elementem Jak poniżej:

             dataPugo.Shipment.References = new ReferenceType[1];
             dataPugo.Shipment.References[0] = new ReferenceType();
 
             if (dataPugo.Shipment.References[0] == null)
             {
                 MessageBox.Show("Jest nullem");
             }
             
             dataPugo.Shipment.References[0].Number = textBox1.Text.ToString();
             dataPugo.Shipment.References[0].Type = "FV"; // nie wiem co to znaczy do wyjaśnienia

Czy też robić tak? To jest mój pierwszy kontakt z API i takimi strukturam.
Moja logika mi podpowiada że powinienem stworzyć tablice z dwoma elementami no i tworze 2 obiekty do których ładuje dane ale wolę się upewnić.

             dataPugo.Shipment.References = new ReferenceType[2];
             dataPugo.Shipment.References[0] = new ReferenceType();
             dataPugo.Shipment.References[1] = new ReferenceType();
             if (dataPugo.Shipment.References[0] == null)
             {
                 MessageBox.Show("Jest nullem");
             }
             
             dataPugo.Shipment.References[0].Number = textBox1.Text.ToString();
             dataPugo.Shipment.References[1].Type = "FV"; // nie wiem co to znaczy do wyjaśnienia

Jeszcze raz dzięki

3
dataPugo.Shipment.References = new ReferenceType[]
{
    new ReferenceType()
    {
        Number = firstReferenceNumber.Text,
        Type = "FV"
    },
    new ReferenceType()
    {
        Number = secondReferenceNumber.Text,
        Type = "FV"
    }
}

bez żadnego sprawdzania nulli, przecież sam tworzysz te elementy w tej samej metodzie. Nie używaj nazw typu textBox1, bo już za kilka dni się pogubisz.
Jeśli stworzysz odpowiedni konstruktor (lub jakąś metodę pomocniczą) oraz enum z typami, to możesz to zrobić krócej i bezpieczniej:

dataPugo.Shipment.References = new ReferenceType[]
{
    new ReferenceType(firstReferenceNumber.Text, ReferenceTypeEnum.FV),
    new ReferenceType(secondReferenceNumber.Text, ReferenceTypeEnum.FV)
}


public enum ReferenceTypeEnum
{
    FV
}

public class ReferenceType
{
    public string Number { get; }
    public string Type { get; }
    
    public ReferenceType(string number, ReferenceTypeEnum type)
    {
        if (string.IsNullOrEmpty(number)) throw new ArgumentNullException(nameof(number));

        Number = number;
        Type = type.ToString();
    }
}
0

Tego If-a z nullem to wiem że trzeba usunąć, napisałem go żeby sprawdzić gdzie występuje bo nie mogłem znaleźć wartości null. Jeżeli chodzi o textBox1 to niestety cała aplikacja jest w taki sposób napisana ja integruje nowego kuriera (mam niewielkie doświadczenie ale to co się w tym kodzie odprawia to... xD).
Dzięki za pomoc.

2
Vorbizzz napisał(a):

Tego If-a z nullem to wiem że trzeba usunąć, napisałem go żeby sprawdzić gdzie występuje bo nie mogłem znaleźć wartości null

Na przyszłość użyj debugera. Programista nieumiejący używać tego narzędzia to nie programista.

1 użytkowników online, w tym zalogowanych: 0, gości: 1