Un collega mi ha chiesto oggi come aggiungere un intervallo a una raccolta. Ha una classe che eredita da Collection<T>
. Esiste una proprietà di sola ricezione di quel tipo che contiene già alcuni elementi. Vuole aggiungere gli elementi in un'altra raccolta alla raccolta di proprietà. Come può farlo in modo compatibile con C # 3? (Notare il vincolo sulla proprietà get-only, che impedisce soluzioni come l'unione e la riassegnazione.)
Certo, un foreach con Property. Aggiungi funzionerà. Ma un List<T>
AddRange in stile sarebbe molto più elegante.
È 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 di reinventare la ruota. Non ho trovato nulla di simile in System.Linq
o morelinq .
Cattivo design? Basta chiamare Aggiungi? Manca l'ovvio?
ICollection<T>
non sembra avere un Add
metodo. msdn.microsoft.com/en-us/library/… Tuttavia ne Collection<T>
ha uno.
Add(T item)
in primo luogo? Sembra un approccio incompleto per offrire la possibilità di aggiungere un singolo elemento e quindi aspettarsi che tutti i chiamanti iterino per aggiungerne più di uno alla volta. La tua affermazione è certamente vera IEnumerable<T>
ma mi sono trovato frustrato ICollections
in più di un'occasione. Non sono in disaccordo con te, mi sto solo sfogando.