In C# 3.0 + .Net 3.5 und höher können Sie dies wie folgt beheben
List<ISomeInterface> interfaceList = new List<ISomeInterface>(list.Cast<ISomeInterface>());
Der Grund, warum dies nicht funktioniert, ist, dass der Konstruktor für List<ISomeInterface>
nimmt in diesem Fall eine IEnumerable<ISomeInterface>
. Der Typ der Listenvariablen ist jedoch nur konvertierbar in IEnumerable<objectA>
. Auch wenn objectA
kann umgewandelt werden in ISomeInterface
der Typ IEnumerable<objectA>
ist nicht konvertierbar in IEnumerable<ISomeInterface>
.
Dies ändert sich jedoch in C# 4.0, das der Sprache Unterstützung für Co- und Contravariance hinzufügt und solche Konvertierungen ermöglicht.