List.AddRange()ada, tapi IList.AddRange()tidak.
Ini menurut saya aneh. Apa alasan dibalik ini?
List.AddRange()ada, tapi IList.AddRange()tidak.
Ini menurut saya aneh. Apa alasan dibalik ini?
Jawaban:
Karena antarmuka harus mudah diimplementasikan dan tidak berisi "segalanya kecuali dapur". Jika Anda menambahkan AddRangeAnda harus menambahkan InsertRangedan 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)
IFoo) Deklarasi untuk menentukan namespace "helper" (mis. MyAssembly) Sedemikian rupa sehingga jika kelas mengklaim untuk mengimplementasikan IFootetapi tidak memiliki metode int Bar(String), kompilator akan otomatis- menghasilkan metode int IFoo.Bar(String p1) {return MyAssembly.ClassHelpers.IFoo.Bar(this, p1);} Seandainya fitur seperti itu ada, antarmuka dapat menyertakan lebih banyak metode seperti AddRangeyang 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 AddRangemetode 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:
AddRange/RemoveRange/InsertRangedapat bekerja langsung pada pengumpulan "internal" dan mengoptimalkanCapacitypengelolaan dan menggunakan metode sepertiArray.Copymemindahkan blok data. Metode ekstensiRemoveRangemungkin akan menjadi urutan magniture lebih lambat dariList.RemoveRange