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

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

Susan Sarandon
Libérer: 2025-02-01 17:51:12
original
707 Les gens l'ont consulté

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

c # Dans la programmation orientée objet, l'héritage de classe dérivé est très courant. Cependant, lors du traitement de l'ensemble (comme une liste), pourquoi il n'est pas possible d'utiliser la même classe de base pour les déclarer, ce qui peut être déroutant.

Considérez le code suivant:

Ce code provoquera des erreurs de compilation lors de l'utilisation de
<code class="language-csharp">interface A { }

class B : A { }

class C : B { }

class Test
{
    static void Main(string[] args)
    {
        A a = new C(); // 正确
        List<A> listOfA = new List<C>(); // 编译错误
    }
}</code>
Copier après la connexion

. Bien que l'instance de la classe C dérivée puisse être attribuée à la variable de classe de base A, la collection n'est pas bonne. List<C> List<A> La raison de cette limite réside dans la méthode de la liste d'initialisation C #. Lors de la création , C # générera la structure de données interne de la liste lors de l'exécution, et il est prévu que le type de stockage soit un objet de A. Cependant, parce que C est une classe dérivée de A, son objet a des membres supplémentaires et occupe plus de mémoire qu'un objet. Par conséquent, l'attribution à

provoquera une dislocation de l'adresse de mémoire, ce qui peut entraîner des erreurs de mémoire.

List<A> Afin de résoudre ce problème et de modifier List<C> comme List<A>, vous pouvez utiliser les méthodes suivantes:

<.> 1. Exprimant la conversion: List<派生类> List<基类>

traverser la liste et convertir explicitement chaque élément en une classe de base:

<.> 2. Linq:

Utilisez LINQ pour convertir l'élément comme suit:
<code class="language-csharp">List<A> listOfA = new List<C>().ConvertAll(x => (A)x);</code>
Copier après la connexion

Ces méthodes permettent une conversion sûre et un alignement de l'adresse mémoire pour garantir le fonctionnement normal de la liste.

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!

source:php.cn
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