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 #?
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!