• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyświetlanie z Listy

Object Storage Arubacloud
0 głosów
399 wizyt
pytanie zadane 31 października 2022 w C# przez XavRock Obywatel (1,390 p.)

Witam

Piszę sobie program, który za pomocą Listy ma przechowywać dane z dwóch rożnych obiektów. Kłopot napotykam podczas wyświetlania, udało mi się napisać działający program tego typu w Java, za pomocą instanceof i Predicate<T> .

Lista:

private List<Pojazd> pojazdy = new();

        public void Dodaj(string marka, string model, string kolorLakieru, DateTime rocznik, string silnik, string rodzajPaliwa, double spalanie, double przebieg, int iloscDrzwi, double cena)
        {
            Sedan sedan = new(marka, model, kolorLakieru, rocznik, silnik, rodzajPaliwa, spalanie, przebieg, iloscDrzwi, cena);
            pojazdy.Add(sedan);
        }

        public void Dodaj(string marka, string model, string kolorLakieru, DateTime rocznik,
            string silnik, string rodzajPaliwa, double spalanie, double przebieg,
            int iloscDrzwi, double cena, double pojemnoscBagaznika, string rodzajTylnejKlapy)
        {
            Combi combi = new(marka, model, kolorLakieru, rocznik, silnik, rodzajPaliwa, spalanie, przebieg, iloscDrzwi, cena, pojemnoscBagaznika, rodzajTylnejKlapy);
            pojazdy.Add(combi);
        }

Wyświetlanie

private static void Wyswietl()
        {
            Console.WriteLine("");
            Baza bazaAut = new();
            WszystkieSedan(bazaAut.Wyswietl(), x => x is Sedan);           
        }

        private static void WszystkieSedan(List<Pojazd> listaPojazdow, Predicate<Pojazd> checker)
        {
            foreach(Pojazd pojazd in listaPojazdow)
            {
                Console.WriteLine(pojazd);
            }
        }

Problem polega na wyświetleniu zawartości Listy, Czy jest ktoś kto mógłby mnie nakierować ? Ten program jest do samorozwoju w C#, proszę tylko o nakierowanie. 

1 odpowiedź

0 głosów
odpowiedź 31 października 2022 przez PH03NIX Mądrala (6,130 p.)

Jeżeli chcesz wyświetlić wszystkie pojazdy z listy, ale mają być one wyświetlane inaczej w zależności od typu możesz nadpisać metodę ToString()

public abstract class Pojazd
{
}

public class Sedan: Pojazd
{
    public override string ToString()
    {
        return "Sedan";
    }
}

public class Combi:Pojazd
{
    public override string ToString()
    {
        return "Combi";
    }
}

Jeżeli chciałeś wyświetlić tylko Sedany z listy to nie używasz nigdzie swojego predykatu. Możesz go użyć np. w następujący sposób:

    private static void WszystkieSedan(List<Pojazd> listaPojazdow, Predicate<Pojazd> checker)
    {
        foreach (Pojazd pojazd in listaPojazdow)
        {
            if(checker(pojazd))
                Console.WriteLine(pojazd);
        }
    }

 

komentarz 3 listopada 2022 przez XavRock Obywatel (1,390 p.)

Mam te metody ToString(), natomiast checker dalej nie działa. 

Metoda odpowiedzialna za wyświetlanie.

        private static void Wyswietl()
        {
            try
            {
                Baza bazaAut = new();
                WszystkieSedan(bazaAut.Wyswietl(), x => x is Sedan);
            }
            catch (Exception)
            {
                Console.WriteLine("Błąd");
            }
         
        }

        private static void WszystkieSedan(List<Pojazd> listaPojazdow, Predicate<Pojazd> checker)
        {
            try
            {
                foreach (Pojazd pojazd in listaPojazdow)
                {
                    if (checker(pojazd))
                    {
                        Console.WriteLine(pojazd);
                    }
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Błąd");
            }

        }

 

komentarz 3 listopada 2022 przez PH03NIX Mądrala (6,130 p.)
Skonkretyzuj co dokładnie nie działa. Wyrzuca jakiś błąd? Nie zachowuje się jakbyś oczekiwał?
komentarz 3 listopada 2022 przez XavRock Obywatel (1,390 p.)
Właśnie nie ma błędu, nic nie wyświetla.
komentarz 3 listopada 2022 przez PH03NIX Mądrala (6,130 p.)

Gdzie próbujesz to wyświetlić, w kodzie masz 

Console.WriteLine(pojazd);

więc będzie to wyświetlone w konsoli.

Ewentualnie 

bazaAut.Wyswietl()

może zwracać pustą listę?

Taki wynik jest u mnie po wywołaniu poniższego kodu:

List<Pojazd> pojazdy = new()
{
    new Sedan(),
    new Combi(),
    new Sedan()
};

Pojazd.WszystkieSedan(pojazdy, x=> x is Sedan);

public abstract class Pojazd
{
    public override string ToString()
    {
        return "Pojazd";
    }

    public static void WszystkieSedan(List<Pojazd> listaPojazdow, Predicate<Pojazd> checker)
    {
        foreach (Pojazd pojazd in listaPojazdow)
        {
            if(checker(pojazd))
            Console.WriteLine(pojazd);
        }
    }
}

public class Sedan: Pojazd
{
    public override string ToString()
    {
        return "Sedan";
    }
}

public class Combi:Pojazd
{
    public override string ToString()
    {
        return "Combi";
    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 614 wizyt
pytanie zadane 8 czerwca 2017 w C# przez liledusty Obywatel (1,430 p.)
0 głosów
1 odpowiedź 957 wizyt
pytanie zadane 11 marca 2017 w C# przez PejtaM Użytkownik (550 p.)
0 głosów
1 odpowiedź 3,290 wizyt
pytanie zadane 22 maja 2016 w C# przez dzidziamocarz Początkujący (370 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...