Odwołanie się do obiektu listy

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ą

Lista[i]

lub do konkretnego pola Lista[i].pole1

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

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

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ć.

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.

1

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

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?

0

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

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