Heim > Backend-Entwicklung > C++ > Wie kann ich Kovarianz mit Indexunterstützung in Sammlungen erreichen?

Wie kann ich Kovarianz mit Indexunterstützung in Sammlungen erreichen?

Mary-Kate Olsen
Freigeben: 2024-12-28 19:04:15
Original
113 Leute haben es durchsucht

How Can I Achieve Covariance with Index Support in Collections?

Kovarianz in Sammlungen mit Indexunterstützung

Kovarianz in Sammlungen ermöglicht die Speicherung abgeleiteter Elemente in einer für einen Basistyp deklarierten Sammlung. Allerdings fehlt der standardmäßigen kovarianten Sammlung, IEnumerable, die Indexunterstützung.

Wie der Fragesteller feststellt, ist das Upcasting einer List zu IList könnte das Hinzufügen von Tieren ermöglichen, die keine Hunde sind, was in der ursprünglichen Liste nicht zulässig ist. Sammlung.

Mögliche Lösungen

Ab .NET 4.5 ist IReadOnlyList und IReadOnlyCollection bieten sowohl kovariantes Verhalten als auch Indexsuche. Sie sind jedoch schreibgeschützt.

Erstellen eines kovarianten Wrappers

Wenn eine beschreibbare Sammlung mit Indexunterstützung erforderlich ist, kann eine Erweiterungsmethode erstellt werden, um eine IList< zu verpacken ;T> und nur die Teilmenge der Methoden verfügbar machen, die die gewünschte Kovarianz bereitstellen:

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...
    }
}
Nach dem Login kopieren

Diese Wrapper-Klasse, CovariantList, implementiert IIndexedEnumerable, das einen Indexer und eine Zähleigenschaft bereitstellt.

Durch Aufrufen von AsCovariant() auf einer IList können Sie eine erhalten Kovariante Sammlung mit Indexunterstützung, die es Ihnen ermöglicht, abgeleitete Elemente abzurufen und zu iterieren und dabei den angegebenen Basistyp beizubehalten.

Das obige ist der detaillierte Inhalt vonWie kann ich Kovarianz mit Indexunterstützung in Sammlungen erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage