Łączenie dwóch list klas

0

Mam dwie klasy (jedna dziedziczy po drugiej). Następnie wczytuje elementy na jedną i na drugą listę klas. W jaki połączyć te listy?

1

Koood.

Jeżeli lista jest zdefiniowana w klasie bazowej, to w dziedziczącej zwyczajnie możesz dodawać prosto do niej.

0
Rev napisał(a):

Jeżeli lista jest zdefiniowana w klasie bazowej, to w dziedziczącej zwyczajnie możesz dodawać prosto do niej.

Klasa bazowa X pobiera elementy z pliku i zwraca listę klas typu X. Natomiast klasa pochodna Y pobiera elementy z pliku i zwraca listę klas typu Y.

Później to wywołuje

X obiekt1 = new X();
Y obiekt2 = new Y();
List<X> lista_x = obiekt1.pobierz();
List<Y> lista_y = obiekt2.pobierz();
1
lista_x.AddRange(obiekt2.pobierz());
0
Rev napisał(a):
lista_x.AddRange(obiekt2.pobierz());

Dziękuje.

2

Trzeba wspomnieć o jednej rzeczy - dlaczego to właściwie działa. Metoda List<T>.AddRange() przyjmuje argument IEnumerable<T>, czyli w tym przypadku IEnumerable<X>, bo takiego typu jest parametr generyczny naszej listy. A my dajemy mu List<Y>, czyli IEnumerable<Y>. A mimo wszystko kod się kompiluje. Otóż zadziała to tylko w przypadku .NET Framework 4. Dlaczego?
Przed .NET 4.0 powyższy interfejs definiowany jest jako IEnumerable<T>, a od .NET 4.0 jako IEnumerable<out T>. Słówko out przed parametrem powoduje, że mamy do czynienia z kowariancją. Po więcej odsyłam do MSDN i wyszukiwarki :).

Jeżeli nie możesz skorzystać z .NET 4.0 to elementy musisz dodać pojedynczo, zrób foreach po obiekt2.pobierz() i dodaj każdy z elementów przez zwykłe lista_x.Add()

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