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
DDDoriginal
2025-02-01 18:01:08650parcourir

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:

<code class="language-csharp">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
    }
}</code>

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.

<code class="language-csharp">List<C> listOfC = new List<C>(); // Your list of derived classes
List<IA> listOfIA = listOfC.ConvertAll(x => (IA)x);</code>

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.

<code class="language-csharp">List<C> listOfC = new List<C>(); // Your list of derived classes
List<IA> listOfIA = listOfC.Cast<IA>().ToList();</code>

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:
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