Maison >développement back-end >C++ >La liste peut-elle être affectée à la liste en C #?
C # Problème de variance: Signer la liste & lt;
dans le problème de la liste & lt; Y a-t-il une solution? Exemple
Considérez le code suivant:
coopération
La coordination
est la possibilité de maintenir l'objet de type dérivé lorsqu'il a déclaré que la structure de données peut maintenir un objet de type de base. Dans l'exemple ci-dessus, la liste<code class="language-csharp">class Animal { } class Giraffe : Animal { } static void Main(string[] args) { // 数组赋值成功 Animal[] animals = new Giraffe[10]; // 隐式赋值失败 List<Animal> animalsList = new List<Giraffe>(); // 错误 // 显式转换失败 List<Animal> animalsList2 = (List<Animal>)new List<Giraffe>(); // 错误 }</code>peut contenir un objet de l'animal ou tout type dérivé (comme la girafe).
La différence carrée dans le tableau et la liste
Le tableau prend en charge la variance de type de référence au moment de l'exécution et effectue l'inspection du type. Cependant, les génériques sont conçus pour obtenir la sécurité des types pendant la compilation. Par conséquent, l'affectation cachée et explicite de la liste
Différence carrée dangereuse
Autoriser ce type de variance carrée provoquera des erreurs d'exécution, comme indiqué dans le code suivant:
C # 4 a introduit la prise en charge de la variance générique de sécurité dans l'interface et l'attribution. Les interfaces telles que Func (collaborative) et les attributions comme Action (inverse) garantissent la sécurité de type.
Solution
<code class="language-csharp">List<Giraffe> giraffes = new List<Giraffe>(); giraffes.Add(new Giraffe()); List<Animal> animals = giraffes; // 错误 animals.Add(new Lion()); // 不安全,违反类型安全</code>
En C # 2, si vous n'avez pas besoin de maintenir une seule liste, vous pouvez utiliser la liste .Convertall pour créer une nouvelle liste avec le type de besoin.
Cette sortie révocée maintient l'image d'origine et reproche le texte pour atteindre la pseudo-originalité.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!