Heim > Backend-Entwicklung > C++ > Wie kann ich mit der Indexsuche in C# kovariante Sammlungen erreichen?

Wie kann ich mit der Indexsuche in C# kovariante Sammlungen erreichen?

Susan Sarandon
Freigeben: 2024-12-31 08:07:10
Original
735 Leute haben es durchsucht

How Can I Achieve Covariant Collections with Index Lookup in C#?

Kovarianz und IList: Erweitern von Sammlungen für Indexsuchen

In C# ermöglichen kovariante Sammlungen das Abrufen von Elementen aus einer übergeordneten Sammlung mithilfe einer untergeordneten Sammlung. Allerdings ist der Standard IEnumerable Schnittstelle, die Kovarianz unterstützt, verfügt nicht über Funktionen zur direkten Indexsuche.

Da List implementiert ICollection mit einer Add-Methode direkt in IList umwandeln. würde das uneingeschränkte Hinzufügen aller Tierarten ermöglichen und damit gegen die ursprünglichen Einschränkungen von List verstoßen.

Um dieses Problem zu beheben, führen .NET 4.5 und höher IReadOnlyList ein. und IReadOnlyCollection, die beide kovariant sind. IReadOnlyList erweitert IReadOnlyCollection mit einem Get-Indexer, der einen indizierten Abruf unter Beibehaltung der Kovarianz ermöglicht.

Both List und ReadOnlyCollection (abgerufen über List.AsReadOnly()) implementieren diese Schnittstellen und stellen eine kovariante Sammlung mit Indexunterstützung bereit.

Wenn Sie jedoch eine kovariante Sammlung mit Get- und Set-Indexern benötigen, sind die Optionen begrenzt. Eine mögliche Lösung besteht darin, die vorhandene IList in eine CovariantList, die nur den Get-Indexer verfügbar macht und gleichzeitig die anderen notwendigen Eigenschaften bereitstellt:

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>
    {
        private readonly IList<T> tail;
        public T this[int index] => tail[index];
        public IEnumerator<T> GetEnumerator() => tail.GetEnumerator();
        public int Count => tail.Count;
    }
}
public interface IIndexedEnumerable<out T> : IEnumerable<T>
{
    T this[int index] { get; }
    int Count { get; }
}
Nach dem Login kopieren

Dieser Ansatz stellt eine kovariante Sammlung bereit, die sowohl IEnumerable und indiziertes Abrufen, während unbeabsichtigte Änderungen an der Originalsammlung verhindert werden.

Das obige ist der detaillierte Inhalt vonWie kann ich mit der Indexsuche in C# kovariante 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