Problem z drzewem list

0

Witajcie, tworzę program (projekt) który z pliku txt utworzy mi takie oto drzewo:

user image

Problem tkwi w tym, że podczas próby przejścia przez listę Kategorii w Korzeniu i próbie ich wypisania - cały czas otrzymuję puste stringi, gdy chcę wyświetlić np. ilość produktów w danej kategorii - dostaję 0, mimo że to nieprawda.

Co do poprawności wstawiania na listę Kategorii w obiekcie Korzeń: proces przebiega poprawnie, za każdym dodaniem na Korzen obiektu Kategoria wypisuję jego zawartość (tego nowo dodanego elementu), wszystko wypisuje poprawnie.

Mam 3 klasy:

Produkt;
Kategoria : Produkt; (dziedziczymy z klasy Produkt)
Korzen : Kategoria; ( -//-)

oto ciało Korzenia:

public class Korzen : Kategoria
    {
        public List<Kategoria> Dzieci = new List<Kategoria>();
        
        public Korzen()
        {
        }

        public void Dodaj(Kategoria element)
        {
            Kategoria dd = new Kategoria();

            Dzieci.Add(element);

            IEnumerator enumerator = Dzieci.GetEnumerator();
            while (enumerator.MoveNext())
            {
                dd = (Kategoria)enumerator.Current;
            }
            MessageBox.Show(dd.NazwaKategorii);
        }

        public int WypiszIloscElementow()
        {
            return Dzieci.Count();
        }

     }

a to sposób, w jaki chcę pobrać zawartości Korzenia...

Kategoria element = new Kategoria();
            
            IEnumerator enumerator = Korzen.Dzieci.GetEnumerator();        // moze tu jest blad ?
               while (enumerator.MoveNext())
               {
                   element = (Kategoria)enumerator.Current;
                   MessageBox.Show(element.NazwaKategorii);
               }

...ktory wypisuje mi puste stringi

0

A możesz wkleić kod tych trzech klas ? Dlaczego zrobiłeś takie hierarchiczne dziedziczenie ?

0

Tak na dobrą sprawę to:

class Produkt
{
   //...
}

class Kategoria : List<Produkt>
{
private:
   string nazwa;
public:
   Kategoria(string nazwa) { this.nazwa = nazwa; }
   string Nazwa { get { return nazwa; } set { nazwa = value; } }
}

List<Kategoria> korzen;

powinno Ci wystarczyć.

A zamiast enumerotorów użyj foreach np:

foreach(Kategoria kategoria in korzen)
  MessageBox.Show(kategoria.Nazwa);
0

dzięki za pomoc, właśnie uporałem się z tym problemem.
Myślę że naciąłem się na klonowaniu obiektów, oraz zamiast enumeratora użyłem foreach. Pomogło :)

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