Saya dulu bekerja di tim di mana LINQ sedikit tidak disukai karena dianggap sulit untuk men-debug kode tersebut. Kami memiliki kesepakatan: setelah setiap rantai LINQ, pengembang membuat variabel lokal di mana dia menulis hasil ToArray (). Apakah array diperlukan di bagian bawah metode, atau hanya berfungsi dengan IEnumerable. Sebelum dikembalikan, hasilnya juga dilemparkan ke sebuah larik, tampaknya tidak ada metode di seluruh basis kode yang mengembalikan atau menerima koleksi selain larik.
Warisan Berjenggot! - Anda akan berpikir dan Anda akan benar. Namun, terlepas dari kenyataan bahwa bertahun-tahun telah berlalu sejak LINQ ada di mana-mana, dan IDE memungkinkan Anda untuk melihat data dalam debug, beberapa pengembang masih memiliki gagasan yang buruk tentang kriteria untuk memilih jenis terima dan kembalikan ketika datang ke koleksi.

Pertama-tama, apa koleksinya? Karena BCL memiliki tipe data dengan nama yang sama, penting untuk dipahami bahwa kumpulan adalah tipe data yang dirancang untuk beroperasi pada sekelompok elemen yang memiliki beberapa karakteristik umum (tipe data). Jadi, apapun yang bisa dicacah adalah koleksi.
Lebih suka abstraksi
, , . , . , . , , .
Lazy loading
- ( IEnumerable) , . IList, , . , lazy loading, — . . , 'Lazy' , , .
IReadOnlyCollection
, , IArray, IReadOnlyCollection, -.
namespace System.Collections.Generic
{
public interface IReadOnlyCollection : IEnumerable, IEnumerable
{
int Count { get; }
}
}- 4.5, read-only . Array, List, IList.
IEnumerable … , IReadOnlyCollection, List. , - List.
Array IReadOnlyCollection List, . IList .
null
, , , , , , , null. null, . - null 0 . 1 null, null, , . :
if(myEnumerable != null)
{
foreach(var item in myEnumerable)
{
}
} , :
foreach(var item in myEnumerable ?? Enumerable.Empty<T>())
{
}IEnumerable/ICollection/IList
, , :
IEnumerable | , -, |
IReadOnlyCollection : IEnumerable | -, |
ICollection : IEnumerable | , (IsReadOnly) |
IReadOnlyList : IReadOnlyCollection | , |
IList : ICollection | , |
, , . , . IEnumerable , - ICollection, IList… .
, , , . , , IReadOnlyCollection. IEnumerable , , , — -. lazy loading, IList ICollection, — read-only .
Web API HTTP
HTTP, , -. , , , IEnumerable IList.
, HTTP JSON - , . , (Newtonsoft.Json, System.Text.Json), List. \ - . IEnumerable response .
, , , , .
Saya akan senang untuk amandemen dan penambahan, saya sarankan Anda membaca Panduan Desain Kerangka untuk Koleksi .