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

Indekser zwaracający i-ty element w List<T>

0 głosów
378 wizyt
pytanie zadane 16 czerwca 2019 w C# przez DobryKurczak Bywalec (2,320 p.)

Witam. Chcę stworzyć indekser, który zwróci i-ty element mojej listy, która zawiera obiekty typu Object. Tutaj struktura mojej klasy Lista:

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

namespace BibliotekaKlas
{
    public class Lista
    {
        private List<Pracownik> lista;
        public Lista()
        {
            lista = new List<Pracownik>();
        }

        public void ZapisConsole()
        {
            foreach(Pracownik p in lista)
            {
                p.ZapisConsole();
            }
        }

        public void OdczytConsole()
        {
            Pracownik pracownik = new Pracownik();
            pracownik.OdczytConsole();
            lista.Add(pracownik);
        }

        public int Rozmiar
        {
            get
            {
                return lista.Count;
            }
        }

        public Pracownik this[int i]
        {
            get
            {
                return lista[i];
            }
        }
    }
}

Zalezy mi na poprawnym zdefiniowaniu indeksera, ma on wyłącznie zwracać i-ty element listy. Nie mam pojęcia jak w tym wypadku to zrobić, no i jak wykorzystać tę właściwość(chcę wywołać w klasie Program.cs, która jest klasą główną).

Domyślam się, że

 return lista[i];

jest niepoprawne.

Klasy Pracownik nie wrzucam, ale jeśli będzie trzeba to wrzucę.

Z góry dziękuję za pomoc.

komentarz 16 czerwca 2019 przez NowyUrzydgownig Mądrala (5,090 p.)
Jest poprawnie.
komentarz 17 czerwca 2019 przez adrian17 Mentor (354,120 p.)

Boczna uwaga: te dwa gettery można by napisać krócej

        public int Rozmiar => lista.Count;
        public Pracownik this[int i] => lista[i];
komentarz 17 czerwca 2019 przez DobryKurczak Bywalec (2,320 p.)

Zgadza się, wszystko jest poprawnie, tylko źle wywoływałem indekser i tu się pogubiłem.
Ale okazało się, że to nie jest nic skomplikowanego. Poprawne wywołanie:

Pracownik prac = lista1[0];
prac.ZapisConsole();

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 393 wizyt
pytanie zadane 20 grudnia 2021 w C# przez mateusz45 Gaduła (3,280 p.)
0 głosów
1 odpowiedź 1,171 wizyt
pytanie zadane 11 stycznia 2020 w C# przez assassin Gaduła (3,260 p.)
0 głosów
0 odpowiedzi 278 wizyt

93,424 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...