Lista jako zmienna klasy

0

Stworzyłem klasę, która ma zmienne string, int a nawet lista stringów i lista intów. Gdy tworzę listę obiektów i dodaje elementy to nawet jak dodaje listę intów, która zawiera już kilka elementów to, gdy chce wyciągnąć tą listę intów z listy obiektów niestety lista jest pusta a dlaczego tak się dzieje?

Załączam kod klasy:

     public class PytFam
    {
        public int ID_Pytania { get; private set; }
        public string pytanie { get; private set; }
        public string kategoria { get; private set; }
        public List<string> ListaOdp {get; private set;}
        public List<int> ListaPkt {get; private set;}

        public PytFam()
        {
            ID_Pytania=0;
            pytanie = "Przykladowe pytanie ";
            kategoria = null;
            ListaOdp = new List<string>();
            ListaPkt = new List<int>();
        }

        public PytFam( int _ID_Pytania, string _pytanie, string _kategoria, List<string> _ListaOdp, List<int> _ListaPkt)
        {
            ID_Pytania = _ID_Pytania;
            pytanie = _pytanie;
            kategoria = _kategoria;
            ListaOdp = _ListaOdp;
            ListaPkt = _ListaPkt;
        }
    }
 
        List<string> ListaOdp1 = new List<string>();
        List<int> ListaPkt1 = new List<int>();
       List<PytFam> ListaPytan = new List<PytFam>();

                    ListaOdp1.Add("Napis"); //ilosc elementow w liscie: 1
                    ListaPkt1.Add(2); //ilosc elementow w liscie: 1

                ListaPytan.Add(new PytFam(10000, "Jakie mogą być kwiaty?", "Inne", ListaOdp1, ListaPkt1));

            ListaPytan[0].ListaOdp1.Count() // tutaj liczba elementow wynosi juz 0

Problem jest z listami, inne zmienne tego obiektu wyświetlają się prawidłowo.

1

Zakładając żę ostatnia linijka to miało być:

ListaPytan[0].ListaOdp.Count;

To błąd jest gdzie indziej niż myślisz, to co podałeś jest ok.
http://ideone.com/sZZnbo

0

Problemem było wtedy czyszczenie listy po dodaniu jej do listy obiektów to zostało naprawione i przesunięte wcześniej ale dalej jest problem bo do w każdym elemencie listy obiektów znajduje się zawsze ta sama lista stringów ListaOdp oraz lista Intów ListaPkt

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

public class PytFam
{
    public int ID_Pytania { get; private set; }
    public string pytanie { get; private set; }
    public string kategoria { get; private set; }
    public List<string> ListaOdp { get; private set; }
    public List<int> ListaPkt { get; private set; }

    public PytFam()
    {
        ID_Pytania = 0;
        pytanie = "Przykladowe pytanie ";
        kategoria = null;
        ListaOdp = new List<string>();
        ListaPkt = new List<int>();
    }

    public PytFam(int _ID_Pytania, string _pytanie, string _kategoria, List<string> _ListaOdp, List<int> _ListaPkt)
    {
        ID_Pytania = _ID_Pytania;
        pytanie = _pytanie;
        kategoria = _kategoria;
        ListaOdp = _ListaOdp;
        ListaPkt = _ListaPkt;
    }
}

public class Test
{
    public static void Main()
    {
        List<PytFam> Pytania = new List<PytFam>();
        Test nn = new Test();
        Pytania = nn.WybierzPytania();

        int odp = Pytania[0].ListaOdp.Count; // tutaj liczba elementow wynosi juz 0
        Console.WriteLine(odp);

        for (int i = 0; i < Pytania.Count; i++)
        {
            for (int j = 0; j < Pytania[i].ListaOdp.Count; j++)
            {
                Console.Write(Pytania[i].ListaOdp[j]+ ", "); //wypisuje wszedzie i=4, a powinno byc jeszcze 0,1,2 i 3
            }
            Console.Write("\n");
        }
       // Console.ReadLine();
    }

    public List<PytFam> WybierzPytania()
    {
        List<string> ListaOdp1 = new List<string>();
        List<int> ListaPkt1 = new List<int>();
        List<PytFam> ListaPytan = new List<PytFam>();
        PytFam pyt = new PytFam();
        Random rand2 = new Random();

        for(int i=0; i<5;i++)
        {
            ListaOdp1.Clear();
            ListaPkt1.Clear();
            for(int j=0; j<5; j++)
            {
                ListaOdp1.Add("Napis ("+i+","+j+")");
                ListaPkt1.Add(rand2.Next(0, 100));
            }
            ListaPytan.Add(new PytFam(10000+1, "Jakie mogą być kwiaty?", "Inne", ListaOdp1, ListaPkt1));
        }
        return ListaPytan;
    }
}

Zauważyłem to, że jak działam na liście nawet, gdy wstawię ją do listy obiektów to się ona zmienia pomimo, że jest już wstawiona i czy można to zmienić?
W każdym elemencie listy obiektów (PytFam) chce mieć inną listę stringów i intów (bo w każdym mają być inne odpowiedzi). Jak rozwiązać ten problem?

0
            ListaOdp1.Clear();
            ListaPkt1.Clear();

Przecież czyścisz te listy — cały czas te same — w każdym przebiegu pętli...
Zamiast czyścić to twórz nowe, za pomocą new.

0

Rzeczywiście trzeba było dać new i problem rozwiązany :).
Po prostu nie spodziewałem się wcześniej, że Clear() wyczyści mi nawet listę, którą wcześniej dodam do listy obiektów.
Dzięki za pomoc :)

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