Par exemple, considérez le code suivant:
Dans ce code, la liste de l'objet girafe est attribuée à la liste référencée par l'animal. Cependant, cette affectation a échoué pendant la compilation en raison du problème de coordination.
class Animal { } class Giraffe : Animal { } static void Main(string[] args) { List<Giraffe> giraffes = new List<Giraffe>(); List<Animal> animals = giraffes; // 编译时错误 }
<变> coopération et non -varabilité
Les types génériques C # peuvent être coordonnés ou inchangés. La coordination permet des références de classe de base pour référence aux objets de classe dérivés, tandis que la non-dégénération empêche de telles affectations. Pour la liste, le comportement par défaut est la non-variabilité, ce qui signifie que la liste ne peut pas être affectée à la liste
.
Afin de résoudre ce problème, il existe plusieurs solutions:
<式> Conversion explicite:Le code suivant peut être utilisé pour afficher la liste
pour listerList<Animal> animals = (List<Animal>)giraffes; // 不推荐,可能导致运行时错误
.convertall pour convertir la liste
pour la listeList<Animal> animals = giraffes.ConvertAll(g => (Animal)g);
La méthode à choisir dépend de la situation spécifique et des exigences pour la robustesse du code. La méthode ICovariant<out T>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!