Witam.
Co może być przyczyną tego, że wciąż dostaję komunikat -> Object reference not set to an instance of an object. Obiekt został utworzony (metoda new ) oraz nie jest on równy NULL.
Macie może jakieś pomysły ?
PdR
Witam.
Co może być przyczyną tego, że wciąż dostaję komunikat -> Object reference not set to an instance of an object. Obiekt został utworzony (metoda new ) oraz nie jest on równy NULL.
Macie może jakieś pomysły ?
PdR
Czytaj ze zrozumieniem ;)
Wklej kod z linią w której występuje błąd
Rozróżniaj pojęcia obiekt i referencja. Obiekt nie może być NULL, tylko referencja. To, że obiekt jest utworzony to nie znaczy, że masz poprawnie do niego referencję zapisaną. Poza tym pewnie chodzi o zupełnie inną referencję niż myślisz (tylko przypuszczam, to jedyne co mogę zrobić gdyż kodu nie dałeś).
Ech, kolejny post w stylu "wszystko mam dobrze, ale nie działa" bez grama kodu. I jak my mamy ci pomóc, skoro wiemy tylko tyle, że masz wszystko dobrze ;)
okej, dzięki za rady z cyklu "wszystko działa ale nie działa" , będę pamiętał o tym ;] Co do kodu , to w sumie stworzyłem obiekt klasy i chciałem się do niejgo odwołać:
KLASA_JAKAS obiekt = new KLASA_JAKAS();
(...)
obiekt.zmienna_1 = wartość;
Dosłownie tak to wygląda, zapisałem używając nazewnictwa ogólnego. Mi to wydaje się całkowicie poprawnie, ale jeszcze "Raczkuje" więc mogę się mylić :)
PdR
To co powyżej jest ok. Daj wreszcie kod który powoduje problem jeśli mamy ci pomóc.
To jest ten kod, z nim jest jakiś problem:
SetProductIaI.paramsType param = new SetProducts.SetProductIaI.paramsType();
prod[a].id = Int32.Parse(Nkod.Value.ToString()); .. tutaj wywala się... a=1
Albo prod[a] albo NKod albo NKod.Value jest null'em. Po wyskoczeniu wyjątku, jak najedziesz myszką na poszczególne zmienne/pola to w chmurce podglądniesz ich wartości (jeśli używasz VC#).
Btw, jakiego typu jest NKod.Value ? Bo zamienisz najpier na łańcuch i z łańcucha na liczbę [???] Użyj Convert.ToInt32()
oh, przypadkow moze byc wiecej :D
moze jeszcze byc tablica/kolekcja prod null albo nawet Nkod.Value i w tedy metoda ToString() wywolana na null sie posypie
a szczerze mowiac to z kodu ktory podales to jak ma sie obiekt param do prod, czy prod[a]
czy param jest jednym z obiektow w kolekcji prod[a]? jesli tak moze wklej wiecej kodu, moze masz zle robione przypisanie lub jakas inne operacja cos nadpisuje
inaczej adf88 bedzie mial racje w 3 poscie :)
Właśnie, jeszcze o samej kolekcji prod zapomniałem. Sprawdź wszystkie.
massther napisał(a)
moze masz zle robione przypisanie lub jakas inne operacja cos nadpisuje
to by się debugger zatrzymał się w jej środku (no chyba, że z jakiejś zewnętrznej biblioteki korzystasz to wtedy ona może mieć bug'a).
wczesniej wkradł się błąd. Chodzi mi tylko o relacje prod[a].id = jakiś_int. Prod[a] jest obiektem klasy productType[] , jest to zewnętrzna klasa, pobrana z serwera (programuje web services).
Zmienna id jest zmienną klasy productType[]; Więcej kodu nie ma sensu zamieszczać, bo już na tym etapie wyskakuje to "nie lubiane" przeze mnie okienko error ;] Być może nie można deklarować obiektu w ten sposób: ...productType[1]; ??
SetProductIaI.productType[] prod = new SetProducts.SetProductIaI.productType[1];
prod[a].id = jakis_int;
Co do konwersji, to jakoś polubiłem metodę Int32.Parse(string); Zmienna id ma być int.A Nkod.value to numericUPDOWN, więc zmienna typu decimal.
Tablice indeksuje się od zera ! Czyli a musi być równe 0. Popraw to.
I dostałeś na pewno "Object reference not set to an instance of an object", czy może coś w stylu "Argument out of range." ?
Jeśli "Object ..." to otwórz sobie okienko z watch'ami (Debug->Windows->Watch) i dodaj na listę:
Polub też tą metodę ;) :
prod[a].id = Convert.ToInt32(Nkod.Value);
hmmm a czy wiesz ze tablice w c# numeruje sie od zero a nie od jeden!!!
wiec jesli object[] o = new object[1];
to:
o[0] = cos_tam; // OK
o[1] = cos_tam; // zle
(bo wczesniej pisales ze a=1)
poza tym to ze utworzyles tablice, nie znaczy ze utworzyles obiekty!!!
czyli po twojej 1 linijce masz miejsce na jeden obiekt typu productType, ale prod[0] nie jest referencja do obiektu, musisz jeszcze dodac prod[a] = new productType();
trzeba bylo od razu dac wiecej kodu i mialbys odp. w kilka minut :P
eh, nie zaladowal mi sie post adf88, wiec sie troche powtorzylem
podkresle raz jeszcze - stworzenie tablicy to nie to samo co stworzenie jej wszystkich obiektow!!!
hmmm a czy wiesz ze tablice w c# numeruje sie od zero a nie od jeden!!!
Oczywiście że wiem i mam od 0numeracje, nie wiem dlaczego napisałem 1, widocznie za dużo mętlik w głowie. Oczywiście w programie jest od 0. A co do wskazówek, to zaraz będę próbował.
Sprawdziłem to. Faktycznie jest null.
Po deklaracji
SetProductIaI.productType[] prod = new SetProducts.SetProductIaI.productType[10];
prod[0].id = Convert.ToInt32(Nkod.Value); // polubiłem metodę - krótsza ;p
Po sprawdzeniu w "podglądaczu" pokazało
Prod
-[0] = null
-[1] = null
(..)
-[10] = null.
Czyli nie wypełniło obiektu klasy. Dlaczego ?
podkresle raz jeszcze - stworzenie tablicy to nie to samo co stworzenie jej wszystkich obiektow!!!
Dzięki :)
PdR
To jest tablica referencji do obiektów (domyślna wartość dla referencji to null), a nie samych obiektów. Obiekty muszą być stworzone oddzielnie, a referencje do nich zapisane w tablicy.