Maison > développement back-end > C++ > Pourquoi ne puis-je pas attribuer la liste à liste en C #?

Pourquoi ne puis-je pas attribuer la liste à liste en C #?

Mary-Kate Olsen
Libérer: 2025-02-02 05:16:09
original
253 Les gens l'ont consulté

Why Can't I Assign List to List in C#?

C # Différence générique: Attribuez une liste et lt;

Lorsque vous utilisez une liste générique en C #, essayez d'attribuer la liste du type dérivé à la liste du type de type dérivé. Ce problème est causé par le conflit entre le type de sécurité et la compilation de la sécurité des types pendant l'exécution. Exemple de question et de code

Considérez le code suivant:

Dans cet exemple, en raison de la vérification d'exécution, il est efficace d'attribuer le réseau de girafe au tableau animal. Cependant, la distribution de la liste à liste

entraînera des erreurs pendant la compilation.

Problèmes différents et de sécurité
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>(); //编译错误
}
Copier après la connexion

Ce problème est lié au concept de variance dans le type générique. La coordination permet d'utiliser des types dérivés dans la position de type de base, et l'onduleur permet d'utiliser des types de base dans la position de type dérivée. Dans l'exemple ci-dessus, la liste attribuant une valeur à la liste

sera considérée comme un changement coordonné.

Cependant, cette affectation peut entraîner des problèmes de sécurité. Si l'objet New Lion est ajouté à AnimalsList, il peut être attribué à AnimalList2 sans aucune vérification de compilation, même s'il viole le type de sécurité de type de liste d'animaux.

Solution en C #

Utilisez le tableau pour l'exécution pendant l'exécution:

Le tableau prend en charge la variance de type de référence pendant l'exécution, ce qui permet d'attribuer le tableau de type dérivé au tableau de type de base.

C # 4 La différence carrée de sécurité:

C # 4 introduit la prise en charge de la variance de sécurité des interfaces et de la configuration. Func est un changement coordonné de T, et l'action est inversée dans T.

C # 2 Méthode:

Dans C # 2, vous pouvez utiliser la liste .Convertall pour créer une nouvelle liste avec le type requis.

Conclusion

C # Le problème de variance met en évidence l'importance de maintenir la sécurité du type pendant l'affectation générique. Bien que le nombre de chèques de tableau ou d'exécution puisse être utilisé pour obtenir des carrés dangereux, la variance de sécurité avec les interfaces et les attributions peut garantir le type correct du type pendant la compilation. Pour la première version de C #, vous pouvez utiliser List .Convertall comme solution alternative.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal