Betrachten Sie beispielsweise den folgenden Code:
In diesem Code wird die Liste des Giraffe -Objekts der von Tier verwiesenen Liste zugeordnet. Diese Zuordnung ist jedoch während der Zusammenstellung aufgrund des Koordinationsproblems fehlgeschlagen.
class Animal { } class Giraffe : Animal { } static void Main(string[] args) { List<Giraffe> giraffes = new List<Giraffe>(); List<Animal> animals = giraffes; // 编译时错误 }
<变> Zusammenarbeit und Nichtversorgung
Die generischen Typen von c #können koordiniert oder unverändert werden. Die Koordination ermöglicht es Basisklassenreferenzen, die abgeleiteten Klassenobjekte zu referenzieren, während die Nicht -Dezgeneration solche Zuordnungen verhindert. Für die Liste ist das Standardverhalten nicht -variabilität, was bedeutet, dass die Liste nicht der Liste
zugewiesen werden kann.
Um dieses Problem zu lösen, gibt es mehrere Lösungen:
<式> Explizite Konvertierung:Der folgende Code kann verwendet werden, um die Liste
zu anzeigen, umList<Animal> animals = (List<Animal>)giraffes; // 不推荐,可能导致运行时错误
.ConvertAll -Methode die Liste
verwenden, umList<Animal> animals = giraffes.ConvertAll(g => (Animal)g);
Welche Methode zu wählen, hängt von der spezifischen Situation und den Anforderungen für die Robustheit des Codes ab. Die ICovariant<out T>
Das obige ist der detaillierte Inhalt vonKann ich einer Basisklassenliste in C#eine Liste abgeleiteter Klassenobjekte zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!