metoda dodająca obiekt do listy

0

Witam, muszę stworzyć 2 metody, jedna, która tworzy nowy obiekt klasy i zapisuje jego wartości w liście, oraz druga, która te wartości odczytuję. Napisałem coś takiego:

public void DodajOcene(string nazwaPrzedmiotu, string data, double wartosc)
        {
            ocena ocena = new ocena(nazwaPrzedmiotu, data, wartosc);
            oceny.Add(ocena);
        }

        public void wypiszOceny()
            {
            foreach (ocena ocena in oceny)
            {
                Console.WriteLine(ocena);
            }
        }

Jednak po zainicjowaniu metod wyświetla mi w konsoli nazwę klasy. czy mógłby ktoś objaśnić co jest źle i jak to zrobić poprawnie? Będę bardzo wdzięczny.

2

Console.WrtieLine() drukuje to co dostało w nawiasie używając metody toString(), a obiekt domyślnie zwraca nazwę klasy aby to zmienić trzeba nadpisać metodę toString() dla twojej klasy.

public override string ToString()
{
  return $"{nazwaPrzedmiotu} {data} {wartosc}";
}

Taką metodę możesz dodać w twojej klasie by to zadziałało.

2

Dodaj przesłonięcie metody ToString() w klasie ocena (btw. nazwy klas powinny być PascalCase).

public override string ToString()
{
    // ...
}
1

Ja byłbym zwolennikiem kontrolowania pól, które podlegają drukowaniu w miejscu, gdzie to następuje.
ToString() szybko okazuje się nieelastyczny - tu chcemy pola ABCD, tam pola BCG itd ... (choć i tak warto go sensownie zaimplementować)


foreach (Ocena ocena in oceny)
            {
                Console.WriteLine("Dnia: {0} Przedmiot {1} ocena {2}", ocena.Data, ocena.Przedmiot, ocena.Wartosc);
            }

Lub w innej pisowni, tu masz więcej możliwości:
http://itcraftsman.pl/c-metody-wyswietlania-stringow/

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