Odwołanie się do obiektu listy

Odwołanie się do obiektu listy
A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Witam, napisałem sobie program, który dodaje do listy obiekty klasy zawierającej pola różnych typów. I mam taki problem chce odwołać się do wartości konkretnego pola za pomocą indeksu. Ale nie wiem jak to zrobić.
Wiem że można się odwołać do całego obiektu za pomocą

Kopiuj
Lista[i]

lub do konkretnego pola Lista[i].pole1

Kopiuj
 ale chciałbym zrobić tak że bez podawania nazwy, tylko żeby po podaniu indeksu wywoływało się odpowiednie pole obiektu. Proszę o pomoc.
SI
  • Rejestracja: dni
  • Ostatnio: dni
0

Zdefiniuj sobie metodę która za parametr przyjmie index, a zwróci Ci wartość konkretnego pola..

A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

A mógłbyś mi pokazać przykładową metodę która by to zrobiła ? Przychodzi mi na myśli że przy deklaracji pól klasy można dodać zmienne określające indeksy ? Ale też nie wiem jak by to zrobić.

RE
  • Rejestracja: dni
  • Ostatnio: dni
0

Raczej nie jest to dobre rozwiązanie i prawie na pewno da się to zrobić lepiej. Jakiego typu obiekty wrzucasz do tej listy? Dlaczego nie możesz odnieść się do nich po ludzku, za pomocą nazwy? Daj więcej kodu.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1

Trzeba po prostu po swojemu zaimplementować indekser, np. tak:

Kopiuj
using System;
using System.Collections.Generic;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Student> studęty = new List<Student>();
            studęty.Add(new Student("Zenon", "Dentka", "1234"));
            studęty.Add(new Student("Franek", "Kimono", "7894556"));

            foreach (var s in studęty)
            {
                Console.WriteLine(s);
            }

            studęty[0][1] = "Maggajwer";
            studęty[1][0] = "Hermenegilda";

            foreach (var s in studęty)
            {
                Console.WriteLine(s);
            }

            Console.ReadLine();
        }
    }

    class Student
    {
        public string Imię { get; set; }
        public string Nazwisko { get; set; }
        public string NumerIndeksu { get; set; }

        public Student(string imię, string nazwisko, string  numerIndeksu)
        {
            this.Imię = imię;
            this.Nazwisko = nazwisko;
            this.NumerIndeksu = numerIndeksu;
        }

        public string this[int index]
        {
            get
            {
                switch (index)
                {
                    case 0:
                        return this.Imię;
                    case 1:
                        return this.Nazwisko;
                    case 2:
                        return this.NumerIndeksu;
                    default:
                        throw new IndexOutOfRangeException("Nie ma tylu właściwości!");
                }
            }
            set
            {
                switch (index)
                {
                    case 0:
                        this.Imię = value;
                        break;
                    case 1:
                        this.Nazwisko = value;
                        break;
                    case 2:
                        this.NumerIndeksu = value;
                        break;
                    default:
                        throw new IndexOutOfRangeException("Nie ma tylu właściwości!");
                }
            }
        }

        public override string ToString()
        {
            return string.Format("Student: {0} {1}, numer indeksu: {2}", this.Imię, this.Nazwisko, this.NumerIndeksu);
        }
    }
}

Ale w 99% przypadków (np. w moim przykładzie) to jest bez sensu. Jesteś pewien, że czegoś takiego potrzebujesz?

A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Dokładnie o to mi chodziło, i teraz jak wywołać metodę która odczyta wartość pola za pomocą indeksu ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.