Przypisanej dodanych wartosci do listy

0

Witam.

Mam klase Igredient :


    internal class Igredient
    {
        private string youWannacalc;

        private string Name { get; set; }
        public List<Igredient> ListIgredient { get; set; } 


      
        public List<Igredient> AddIdredient()
        {
            var listIgredients = new List<Igredient>();
            do
            {
                Console.WriteLine("Add Name of Idgredient");
                string nameOfIdgredient = Console.ReadLine();

                listIgredients.Add(new Igredient() { Name = nameOfIdgredient });

                youWannacalc = StringOperation.ReadParameter("If you wanna add next idgredient enter YES");
            }
            while (youWannacalc == "YES");


          /   //Console.WriteLine("----------------------------------");
            //Console.WriteLine("It is a list available ingredients");
            //foreach (var item in listIgredients)
            //{
            //    Console.WriteLine($"{item.Name} ");
            //}

            return listIgredients;
        }

    }

I chcialbym w metodzie main uzyc metody AddAddIdredient ktora stworzy mi nowa liste i ta liste przypisze do mojego proporty czyli listy w klasie Igredient

W klasie main tworze taki zapis :


var idredients = new Igredient();
idredients.AddIdredient();

Jednak to nie przypisuje mi wartosci do listy ktora utworzylem w klasie Idgredience.

Chcialbym pozniej odczytac liste skladnikow za pomoca metody ktora stworzylem(jak na razie pokazuje nulle) :


ShowList(idredients.ListIgredient);

 public static void ShowList ( IEnumerable<object> giveList)
        {
            foreach (var item in giveList)
            {
                Console.WriteLine(item);
            }
        }

Prosze rowniez o wytlumaczenie jak to wszystko robic, dlaczego robie to zle i ewentualnie pozniej odeslac do literatury to sobie doczytam.

0

Ta klasa jest za przeproszeniem do d. nie podobna. Naucz się podstaw programowania. Zęby bolą jak się na to patrzy.
Nie widzisz że to się wszystko zapętla ? Podziel to na dwie klasy albo podziel to składniki statyczne i na te które mają się znajdować w obiekcie

0

Dobrze, że próbujesz pisać po angielsku, ale popełniasz dużo błędów językowych:

internal class Igredient

tutaj Igredient

string nameOfIdgredient = Console.ReadLine();

tutaj idgredient
Niestety ale oba są błędne :)

1

@Zimny Krawiec: uspokoj sie
@XardasLord to powinno pojsc jako komentarz

masz nulle, bo AddIdredient zwraca nowa liste a ta ktora sprawdzasz czyli idredients.ListIgredient jest nullem bo nigdy nigdzie nie jest ustawiana

  1. inicjalizuj od razu nowa liste na zasadzie
public List<Igredient> ListIgredient { get; set; }  = new List<Igredient>()
  1. w AddIdredient ma zwracac void. Dlaczego cos co dodaje, ma jeszcze cos zwracac?

  2. w AddIdredient zamiast tworzyc nowa liste, korzystaj z tej ktora jest w klasie czyli this.ListIgredient (this nie jest wymagane, ale chce Ci zobrazowac ze to nalezy do tej klasy)

co to jest StringOperation.ReadParameter ?

jezeli chodzi o literarure, to moze byc za wczesnie na to, ale zawsze warto polecic https://en.wikipedia.org/wiki/SOLID

0

@fasadin: Dziękuję za merytoryczne wyjaśnienie sprawy. Tak jak napisałeś, wcześniej doszedłem do tego, żeby od razu przy liście ją inicjalizować i później tylko przypisywać do niej wartości. Niby logiczne ale na początku drogi nie koniecznie :P.
Co do zwracania listy to rzeczywiście masz rację, że do końca to nie ma sensu. Oczywiście poprawie.
O Solidzie chętnie przeczytam bo temat mnie nie ominie.
StringOperator jest to moja klasa statyczna która ma metody które operują na stringach. W klasie tej jest metoda ReadParameter do sprawdzenia do podał użytkownik(TAK/NIE). Wywołuję ją w 2-3 miejscach w kodzie to postanowiłem wyrzucić to do osobnej metody.

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