Bir iş arkadaşım bugün koleksiyona nasıl bir aralık eklendiğimi sordu. O, Collection<T>
'dan miras alan bir sınıfa sahip. Zaten bazı öğeler içeren bu tür bir get-only özelliği var. Başka bir koleksiyondaki eşyaları mülk koleksiyonuna eklemek istiyor. C# 3 dostu bir şekilde nasıl yapabilir? (Yalnızca alma ve yeniden atama gibi çözümleri engelleyen get-only özelliği hakkındaki kısıtlamaya dikkat edin.)Koleksiyona ekleSürü oluşturma
Elbette, Mülk sahibi olan bir foreach. Ekle çalışacaktır. Ama List<T>
tarzı AddRange çok daha şık olurdu.
Bu bir uzantısı yöntemi yazmak kolay yeter:
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 ediyorum his var. System.Linq
veya morelinq'da benzer bir şey bulamadım.
Bozuk tasarım? Sadece Çağrı Ekle? Açık olanı mı kaçırıyorsun?
LINQ'dan Q'un 'sorgu' olduğunu ve gerçekten veri alma, yansıtma, dönüştürme vb. Ile ilgili olduğunu unutmayın.Mevcut koleksiyonları değiştirmek LINQ'un amaçlanan amacına gerçekten girmez, bu yüzden LINQ bunun için herhangi bir şey sunmaz. Ancak uzatma yöntemleri (ve özellikle örneğiniz) bunun için idealdir. – Levi
Tek sorun, 'ICollection' '' '' yöntemine sahip görünmüyor. http://msdn.microsoft.com/en-us/library/system.collections.icollection_methods(v=vs.100).aspx 'Koleksiyon ' bir tane var. –
@TimGoodman - Bu jenerik olmayan bir arayüz. Bkz. Http://msdn.microsoft.com/en-us/library/92t2ye13.aspx – TrueWill