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
Lepaskan: 2024-12-31 08:07:10
asal
735 orang telah melayarinya

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; }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan