Bir iş arkadaşım bugün bana bir koleksiyona nasıl aralık ekleyebileceğimi sordu. Miras alan bir sınıfı var Collection<T>
. Zaten bazı öğeleri içeren bu türden bir get-only özelliği vardır. Mülk koleksiyonuna başka bir koleksiyondaki öğeleri eklemek istiyor. Bunu C # 3 dostu bir şekilde nasıl yapabilir? (Union yapma ve yeniden atama gibi çözümleri engelleyen get-only özelliğiyle ilgili kısıtlamaya dikkat edin.)
Elbette, Mülkiyetli bir foreach. Ekle çalışacaktır. Ama bir- List<T>
tarzlı AddRange çok daha zarif olurdu.
Bir uzatma yöntemi yazmak yeterince kolaydır:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Ama tekerleği yeniden icat ettiğimi hissediyorum. Hiçbir şey benzer in bulamadık System.Linq
ya morelinq .
Kötü tasarım? Sadece Arayın Ekle? Bariz olanı mı kaçırıyorsunuz?
ICollection<T>
bir Add
metodu yok gibi görünüyor . msdn.microsoft.com/en-us/library/… Ancak Collection<T>
bir tane var.
Add(T item)
ilk etapta var? Tek bir öğe ekleme ve ardından tüm arayanların aynı anda birden fazla öğe eklemek için yineleme yapmasını beklemek için yarı pişmiş bir yaklaşım gibi görünüyor. İfadeniz kesinlikle doğru IEnumerable<T>
ama kendimi ICollections
birden fazla kez hayal kırıklığına uğratmış buldum . Sana katılmıyorum, sadece havalandırıyorum.