Maison > développement back-end > C++ > Comment puis-je convertir une liste de classes dérivées en une liste de classes de base en C #?

Comment puis-je convertir une liste de classes dérivées en une liste de classes de base en C #?

DDD
Libérer: 2025-02-01 18:01:08
original
730 Les gens l'ont consulté

How Can I Convert a List of Derived Classes to a List of Base Classes in C#?

Convertir une liste de classes dérivées en une liste de classes de base en C #

L'héritage en C # permet de créer des classes dérivées à partir de classes de base ou d'interfaces. Cependant, l'attribution directe d'un List d'une classe dérivée à un List de sa classe de base n'est pas autorisée. Cette limitation découle de la rigueur du système de type concernant les paramètres de type générique.

Considérez cet exemple:

interface IA {}

class B : IA {}

class C : B {}

class Test
{
    static void Main(string[] args)
    {
        IA a = new C(); // This is valid
        List<IA> listOfIA = new List<C>(); // Compiler error
    }
}
Copier après la connexion

Pour surmonter cela, nous pouvons utiliser deux méthodes principales:

Méthode 1: Utilisation de ConvertAll

Cette approche itère à travers la liste des classes dérivées et jette explicitement chaque élément au type de classe de base.

List<C> listOfC = new List<C>(); // Your list of derived classes
List<IA> listOfIA = listOfC.ConvertAll(x => (IA)x);
Copier après la connexion

Méthode 2: Utilisation de Linq Cast

linq fournit une solution plus concise en utilisant la méthode Cast<T>. Cette méthode effectue la même conversion de type que ConvertAll mais avec une syntaxe plus rationalisée.

List<C> listOfC = new List<C>(); // Your list of derived classes
List<IA> listOfIA = listOfC.Cast<IA>().ToList();
Copier après la connexion

Les deux méthodes obtiennent le même résultat: une nouvelle liste contenant les objets de la liste originale, mais avec le type de classe de base. L'approche LINQ (Cast<T>) est généralement préférée pour sa lisibilité et sa concision. N'oubliez pas de gérer les exceptions potentielles si le casting peut échouer (par exemple, si la liste contient des éléments qui ne sont pas réellement dérivés de la classe de base).

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