Maison > développement back-end > C++ > Comment puis-je obtenir une covariance avec la prise en charge des index dans les collections ?

Comment puis-je obtenir une covariance avec la prise en charge des index dans les collections ?

Mary-Kate Olsen
Libérer: 2024-12-28 19:04:15
original
170 Les gens l'ont consulté

How Can I Achieve Covariance with Index Support in Collections?

Covariance dans les collections avec prise en charge d'index

La covariance dans les collections permet de stocker des éléments dérivés dans une collection déclarée pour un type de base. Cependant, la collection de covariantes par défaut, IEnumerable, ne prend pas en charge les index.

Comme le note l'interrogateur, la conversion ascendante d'une liste à IList pourrait permettre l'ajout d'animaux autres que les chiens, ce qui n'est pas autorisé dans la liste originale collection.

Solutions possibles

À partir de .NET 4.5, IReadOnlyList et IReadOnlyCollection offrent à la fois un comportement covariant et des recherches d'index. Cependant, ils sont en lecture seule.

Création d'un wrapper covariant

Si une collection inscriptible avec prise en charge d'index est requise, une méthode d'extension peut être créée pour envelopper un IList< ;T> et exposez uniquement le sous-ensemble de méthodes qui fournissent la covariance souhaitée :

public static class Covariance
{
    public static IIndexedEnumerable<T> AsCovariant<T>(this IList<T> tail)
    {
        return new CovariantList<T>(tail);
    }
    private class CovariantList<T> : IIndexedEnumerable<T>
    {
        // Implementation...
    }
}
Copier après la connexion

Cette classe wrapper, CovariantList, implémente IIndexedEnumerable, qui fournit un indexeur et une propriété count.

En appelant AsCovariant() sur un IList, vous pouvez obtenir une collection covariante avec prise en charge d'index, vous permettant de récupérer et de parcourir des éléments dérivés tout en conservant le type de base spécifié.

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