Seorang rekan kerja hari ini bertanya kepada saya bagaimana cara menambahkan rentang ke koleksi. Dia memiliki kelas yang diwarisi Collection<T>
. Ada properti get-only dari jenis tersebut yang sudah berisi beberapa item. Dia ingin menambahkan item dalam koleksi lain ke koleksi properti. Bagaimana dia bisa melakukannya dengan cara yang ramah C # 3? (Perhatikan batasan tentang properti get-only, yang mencegah solusi seperti melakukan Union dan menetapkan ulang.)
Tentu, kedepan dengan Properti. Tambahkan akan berfungsi. Tapi List<T>
AddRange bergaya akan jauh lebih elegan.
Cukup mudah untuk menulis metode ekstensi:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Tapi saya merasa saya menemukan kembali kemudi. Saya tidak menemukan sesuatu yang serupa di System.Linq
atau morelinq .
Desain yang buruk? Panggil saja Tambahkan? Kehilangan yang sudah jelas?
ICollection<T>
sepertinya tidak punya Add
metode. msdn.microsoft.com/en-us/library/… Namun Collection<T>
punya satu.
Add(T item)
di tempat pertama? Sepertinya pendekatan setengah matang untuk menawarkan kemampuan untuk menambahkan satu item dan kemudian mengharapkan semua penelepon untuk mengulang untuk menambahkan lebih dari satu pada satu waktu. Pernyataan Anda memang benar, IEnumerable<T>
tetapi saya mendapati diri saya frustrasi ICollections
lebih dari satu kali. Saya tidak setuju dengan Anda, hanya ventilasi.