Un collega mi ha chiesto oggi come aggiungere una gamma a una raccolta. Ha una classe che eredita da Collection<T>
. C'è una proprietà get-only di quel tipo che contiene già alcuni elementi. Vuole aggiungere gli elementi di un'altra raccolta alla raccolta di proprietà. Come può farlo in modo amichevole con C# 3? (notare il vincolo relativo alla proprietà get-only, che impedisce soluzioni come Unione e riassegnazione.)AddRange to a Collection
Certo, un foreach con Proprietà. Aggiungi funzionerà. Ma uno AddRange di stile List<T>
sarebbe molto più elegante.
E 'abbastanza facile scrivere un metodo di estensione:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Ma ho la sensazione che sto reinventare la ruota. Non ho trovato nulla di simile in System.Linq
o morelinq.
Disegno errato? Basta chiamare Aggiungi? Manca l'ovvio?
Ricorda che la Q di LINQ è "query" e riguarda davvero il recupero dei dati, la proiezione, la trasformazione, ecc.La modifica delle raccolte esistenti in realtà non rientra negli obiettivi previsti da LINQ, motivo per cui LINQ non fornisce nulla di pronto per questo. Ma i metodi di estensione (e in particolare il tuo campione) sarebbero l'ideale per questo. – Levi
Un problema, 'ICollection' non sembra avere un metodo 'Aggiungi'. http://msdn.microsoft.com/en-us/library/system.collections.icollection_methods(v=vs.100).aspx Tuttavia 'Collection ' ne ha uno. –
@TimGoodman - Questa è l'interfaccia non generica. Vedi http://msdn.microsoft.com/en-us/library/92t2ye13.aspx – TrueWill