Menangani Bahaya Penghitungan Berbilang IEnumerable
Apabila bekerja dengan koleksi IEnumerable, pembangun sering menghadapi amaran "Kemungkinan penghitungan berbilang IEnumerable ," yang timbul apabila koleksi diulang beberapa kali. Isu ini boleh menimbulkan masalah, terutamanya apabila bekerja dengan jenis koleksi tertentu, seperti yang mewakili pertanyaan pangkalan data atau operasi mahal lain.
Pertimbangkan coretan kod berikut:
public List<object> Foo(IEnumerable<object> objects) { if (objects == null || !objects.Any()) throw new ArgumentException(); var firstObject = objects.First(); var list = DoSomeThing(firstObject); var secondList = DoSomeThingElse(objects); list.AddRange(secondList); return list; }
Satu cara untuk elakkan amaran penghitungan berbilang adalah untuk mengubah suai parameter kaedah untuk menerima Senarai
Pilihan lain ialah menukar IEnumerable kepada Senarai pada permulaan kaedah:
public List<object> Foo(IEnumerable<object> objects) { var objectList = objects.ToList(); // ... }
Walaupun teknik ini berkesan dalam mencegah amaran, ia boleh berasa janggal dan tidak perlu verbose.
Kunci untuk memahami isu ini terletak pada semantik yang disampaikan oleh tandatangan kaedah. Melepasi parameter IEnumerable membayangkan bahawa pemanggil menjangkakan kaedah untuk menghitung koleksi sekali sahaja. Dengan menerima IList atau ICollection, anda secara eksplisit menyampaikan jangkaan koleksi anda kepada pemanggil, mengurangkan risiko salah faham dan kesilapan yang mahal.
Dalam situasi di mana penggunaan IEnumerable adalah penting, adalah dinasihatkan untuk melaksanakan ToList( ) penukaran pada permulaan kaedah. Ini memastikan bahawa lelaran berikutnya tidak menemui amaran penghitungan berbilang.
Adalah malang bahawa .NET tidak menyediakan antara muka yang merangkum kefungsian IEnumerable, Count dan pengindeks tanpa kaedah penambahan atau pengalihan keluar. Antara muka sedemikian akan memudahkan masalah ini dan menyediakan penyelesaian yang lebih bersih dan ringkas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Amaran 'Kemungkinan Penghitungan Berbilang IEnumerable' dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!