Cast von einer speziellen auf eine allgemeine Liste (Vererbung) funktioniert nicht

Thomas D

Erfahrenes Mitglied
Hallo!

Ich verwendet ein Objekt ElementArea, das von ElementStandard erbt. Nun habe ich eine Methode, die als Parameter eine Liste von ElementStandard-Objekten erwartet:

Code:
getCommaList (List<ElementStandard> targetList)

Wenn ich diese nun mit

Code:
List<ElementArea> test = new List<ElementArea>();
getCommaList(test);

aufrufen will, dann bekomme ich folgende Fehlermeldung in Visual Studio: Argument '1': cannot convert from 'System.Collections.Generic.List<layxml.ElementArea>' to 'System.Collections.Generic.List<layxml.ElementStandard>'

Auch wenn ich versuche, mit

Code:
test.ToList<ElementArea>()

die Liste zu casten (müsste ja aufgrund der Vererbung ja ohnehin nicht notwendig sein), bekomme ich zusätzlich noch folgende Fehlermeldung: Instance argument: cannot convert from 'System.Collections.Generic.List<layxml.ElementArea>' to 'System.Collections.Generic.IEnumerable<layxml.ElementStandard>'

Muss ich in meinen Objekten eine spezielle Methode implementieren, damit diese Casts möglich sind? Denn normalerweise müsste es ja kein Problem sein, von einem speziellen Objekt (ElementArea) auf ein allgemeines (ElementStandard) zu casten oder übersehe ich dabei nur etwas Entscheidendes? ...
 
Hi.

Eine List<A> ist etwas völlig anderes als eine List<B> -- selbst wenn A Basisklasse von B ist.

Du könntest deine Methode generisch definieren, so das diese mit jeder Art Liste aufgerufen werden kann, deren Elemente eine Unterklasse von ElementStandard sind:
C#:
Ret getCommaList<T>(List<T> targetList) where T: ElementStandard {
   ...
}
Gruß

PS: Du kannst aber natürlich durchaus ElementArea Objekte in eine List<ElementStandard> speichern.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück