Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencapai Koleksi Kovarian dengan Carian Indeks dalam C#?

Bagaimanakah Saya Boleh Mencapai Koleksi Kovarian dengan Carian Indeks dalam C#?

Susan Sarandon
Susan Sarandonasal
2024-12-31 08:07:10752semak imbas

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

Kovarian dan IList: Memperluaskan Koleksi untuk Carian Indeks

Dalam C#, koleksi kovarian membenarkan mendapatkan semula item daripada koleksi induk menggunakan koleksi anak. Walau bagaimanapun, standard IEnumerable antara muka, yang menyokong kovarians, tidak mempunyai keupayaan carian indeks langsung.

Sejak Senarai melaksanakan ICollection dengan kaedah Tambah, menghantarnya terus ke IList akan membenarkan penambahan tanpa had bagi mana-mana jenis haiwan, melanggar kekangan List asal.

Untuk menangani isu ini, .NET 4.5 dan kemudiannya memperkenalkan IReadOnlyList dan IReadOnlyCollection, yang kedua-duanya kovarian. IReadOnlyList memanjangkan IReadOnlyCollection dengan dapatkan pengindeks, membenarkan pengambilan semula diindeks sambil mengekalkan kovarians.

Kedua-dua Senarai dan ReadOnlyCollection (diperolehi melalui List.AsReadOnly()) melaksanakan antara muka ini, menyediakan koleksi kovarian dengan sokongan indeks.

Walau bagaimanapun, jika anda memerlukan koleksi kovarian dengan pengindeks get dan set, pilihan adalah terhad. Penyelesaian yang berpotensi ialah membungkus IList ke dalam CovariantList, yang hanya mendedahkan get indexer sambil menyediakan sifat lain yang diperlukan:

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; }
}

Pendekatan ini menyediakan koleksi kovarian yang menyokong kedua-dua IEnumerable dan pengambilan semula diindeks, sambil menghalang pengubahsuaian yang tidak diingini pada koleksi asal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Koleksi Kovarian dengan Carian Indeks dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn