List.AddRange()
ada, tapi IList.AddRange()
tidak.
Ini menurut saya aneh. Apa alasan dibalik ini?
89
Karena antarmuka harus mudah diimplementasikan dan tidak berisi "segalanya kecuali dapur". Jika Anda menambahkan AddRange
Anda harus menambahkan InsertRange
dan RemoveRange
(untuk simetri). Pertanyaan yang lebih baik adalah mengapa tidak ada metode ekstensi untuk IList<T>
antarmuka yang mirip dengan IEnumerable<T>
antarmuka. (metode penyuluhan untuk di-tempat Sort
, BinarySearch
... akan berguna)
AddRange/RemoveRange/InsertRange
dapat bekerja langsung pada pengumpulan "internal" dan mengoptimalkanCapacity
pengelolaan dan menggunakan metode sepertiArray.Copy
memindahkan blok data. Metode ekstensiRemoveRange
mungkin akan menjadi urutan magniture lebih lambat dariList.RemoveRange
IFoo
) Deklarasi untuk menentukan namespace "helper" (mis.MyAssembly
) Sedemikian rupa sehingga jika kelas mengklaim untuk mengimplementasikanIFoo
tetapi tidak memiliki metodeint Bar(String)
, kompilator akan otomatis- menghasilkan metodeint IFoo.Bar(String p1) {return MyAssembly.ClassHelpers.IFoo.Bar(this, p1);}
Seandainya fitur seperti itu ada, antarmuka dapat menyertakan lebih banyak metode sepertiAddRange
yang dapat diimplementasikan dalam hal perilaku dasar, tetapi beberapa implementasi dapat mengoptimalkan.Bagi mereka yang ingin memiliki metode ekstensi untuk "AddRange", "Sort", ... di IList,
Di bawah ini adalah
AddRange
metode ekstensi:public static void AddRange<T>(this IList<T> source, IEnumerable<T> newList) { if (source == null) { throw new ArgumentNullException(nameof(source)); } if (newList == null) { throw new ArgumentNullException(nameof(newList)); } if (source is List<T> concreteList) { concreteList.AddRange(newList); return; } foreach (var element in newList) { source.Add(element); } }
Saya membuat perpustakaan kecil yang melakukan ini. Saya merasa lebih praktis daripada harus mengulangi metode ekstensi pada setiap proyek.
Beberapa metode lebih lambat daripada List tetapi mereka melakukan pekerjaan itu.
Inilah GitHub yang menarik minat mereka:
Penyimpanan IListExtension
sumber