Maison > développement back-end > C++ > Une liste C# peut-elle contenir plusieurs types génériques avec différents paramètres de type ?

Une liste C# peut-elle contenir plusieurs types génériques avec différents paramètres de type ?

Barbara Streisand
Libérer: 2025-01-18 16:32:13
original
512 Les gens l'ont consulté

Can a C# List Hold Multiple Generic Types with Different Type Parameters?

Utiliser une liste C# avec plusieurs types génériques : une solution

Le défi réside dans la création d'une liste C# capable de contenir plusieurs types génériques avec différents paramètres de type au sein de la même liste. Considérons une classe Metadata<T> limitée aux types valeur. Le but est de créer une liste pouvant stocker des objets Metadata<int>, Metadata<bool> et Metadata<double> simultanément.

Utiliser directement une liste de Metadata<T> n'est pas possible car T doit être un type unique et concret. Cependant, une solution utilisant l'héritage offre une approche pratique.

Solution utilisant l'héritage :

Cette approche introduit une classe de base abstraite Metadata et en dérive des classes spécialisées comme Metadata<T>.

public abstract class Metadata { }

public class Metadata<T> : Metadata where T : struct
{
    private T mDataType; 
    // ... other members ...
}
Copier après la connexion

Maintenant, une liste de la classe de base abstraite Metadata peut être créée :

List<Metadata> metadataObjects = new List<Metadata>();
Copier après la connexion

Cette liste peut désormais accueillir des instances de différents Metadata<T> types :

metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
Copier après la connexion

Cela résout élégamment le problème en fournissant un type commun (Metadata) pour la liste tout en permettant des implémentations spécifiques à un type via l'héritage. L'accès au T spécifique dans chaque objet nécessiterait de revenir au type Metadata<T> approprié. Il s'agit d'un modèle courant lorsqu'il s'agit de polymorphisme et de types génériques en C#.

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