Maison > développement back-end > C++ > Comment puis-je stocker plusieurs types génériques dans une seule liste en C# ?

Comment puis-je stocker plusieurs types génériques dans une seule liste en C# ?

Barbara Streisand
Libérer: 2025-01-18 16:41:09
original
937 Les gens l'ont consulté

How Can I Store Multiple Generic Types in a Single List in C#?

Les listes en C# stockent plusieurs types génériques

Les types génériques en C# fournissent un mécanisme puissant pour créer des classes et des méthodes pouvant fonctionner sur différents types de données. Cependant, un problème courant survient souvent lorsque l’on tente d’utiliser plusieurs types génériques dans une liste.

Considérons l'exemple suivant :

<code class="language-csharp">public class Metadata<DataType> where DataType : struct
{
    private DataType mDataType;
}

List<Metadata<DataType>> metadataObjects; //错误: DataType 未定义
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
Copier après la connexion

Le but ici est de créer une liste contenant des objets métadonnées de différents types de données. Cependant, la contrainte Metadata<DataType> sur la classe where restreint le type générique DataType à un type valeur. Cela signifie metadataObjects que chaque élément de la liste doit être du même type générique, il n'est donc pas possible d'ajouter des objets de types différents.

Pour surmonter cette limitation, une solution consiste à introduire une classe de base abstraite pour Metadata comme suit :

<code class="language-csharp">public abstract class Metadata
{
}

// 继承抽象 Metadata 类
public class Metadata<DataType> : Metadata where DataType : struct
{
    private DataType mDataType;
}</code>
Copier après la connexion

En créant une classe de base abstraite Metadata, une classe générique Metadata<DataType> peut désormais étendre cette classe de base. Cela nous permet d'avoir une liste d'objets Metadata où chaque élément peut être d'un type générique différent.

Le code modifié est le suivant :

<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>();
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
Copier après la connexion

Maintenant metadataObjects les listes peuvent contenir des objets de différents types de valeur, atteignant ainsi l'objectif d'avoir plusieurs types génériques dans une liste. Il convient de noter que la conversion de type est requise lors de l'accès aux attributs mDataType, car la classe de base Metadata ne connaît pas le DataType spécifique.

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