Heim >Backend-Entwicklung >C++ >Wie kann ich Elemente aus einer kovarianten Sammlung mit Indizierung abrufen?

Wie kann ich Elemente aus einer kovarianten Sammlung mit Indizierung abrufen?

DDD
DDDOriginal
2025-01-02 15:32:40968Durchsuche

How Can I Get Items from a Covariant Collection with Indexing?

Elemente aus einer kovarianten und indizierten Sammlung abrufen

Kovariante Sammlungen ermöglichen das Abrufen von Elementen durch Upcasting, haben jedoch oft keine Indexunterstützung. IEnumerable ist ein Beispiel für eine kovariante Sammlung ohne Indizierung. Möglicherweise ist jedoch eine kovariante Sammlung erforderlich, die sowohl Indizierung als auch Upcasting bietet.

Das Problem tritt bei der List-Klasse auf, die ICollection implementiert und über eine Add-Methode verfügt. Upcasting einer Liste zu einem IList könnte zum Hinzufügen von Tieren führen, die keine Hunde sind, was gegen die Typbeschränkung der ursprünglichen Sammlung verstößt.

Wenn eine kovariante Sammlung mit Indexsuchen gewünscht wird, können Alternativen in Betracht gezogen werden:

  • .NET 4.5 und höher: IReadOnlyList und IReadOnlyCollection Bereitstellung kovarianter Indexierungsfunktionen. Liste und ReadOnlyCollection Implementieren Sie beide Schnittstellen.
  • Benutzerdefinierter Kovarianz-Wrapper: Eine Erweiterungsmethode wie AsCovariant kann erstellt werden, um eine IList und stellen Sie nur die IEnumerable und holen Sie sich den Indexer, um einen kovarianten Wrapper mit Indexierungsunterstützung zu erstellen.

Das obige ist der detaillierte Inhalt vonWie kann ich Elemente aus einer kovarianten Sammlung mit Indizierung abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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