Maison >développement back-end >C++ >La liste peut-elle être affectée à la liste en C #?

La liste peut-elle être affectée à la liste en C #?

Linda Hamilton
Linda Hamiltonoriginal
2025-02-02 05:36:11497parcourir

Can List Be Assigned to List in 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 à liste échouera.

Différence carrée dangereuse

Autoriser ce type de variance carrée provoquera des erreurs d'exécution, comme indiqué dans le code suivant:

La différence de sécurité dans le C # 4

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn