dato un ICollection<T>
un'istanza esistente (ad esempio dest
) qual è il modo più efficiente e leggibile per aggiungere elementi da un IEnumerable<T>
?Come posso aggiungere un IEnumerable <T> a un ICollection esistente <T>
Nel mio caso d'uso, ho qualche tipo di metodo di utilità Collect(IEnumerable items)
che restituisce una nuova ICollection
con gli elementi da items
, quindi lo faccio nel modo seguente:
public static ICollection<T> Collect<T>(IEnumerable<T> items) where T:ICollection<T>
{
...
ICollection<T> dest = Activator.CreateInstance<T>();
items.Aggregate(dest, (acc, item) => { acc.Add(item); return acc; });
...
return dest;
}
Domanda: IS c'è un modo "migliore" (più efficiente o leggibile) di farlo?
UPDATE: Penso che l'uso di Aggregate()
è abbastanza fluente e non così inefficiente come invocando ToList().ForEach()
. Ma non sembra molto leggibile. Poiché nessun altro concorda con l'uso di Aggregate()
, vorrei leggere i motivi per NON utilizzare Aggregate()
per questo scopo.
Considererei questo abuso del metodo di estensione 'Aggregato'. – Codor
@Codor Condivido i tuoi sentimenti riguardo allo stato condiviso mutabile. Ma non sto ottenendo un'alternativa "più economica". –
Perché non un ciclo semplice per aggiungere gli elementi a 'dest'? – ckruczek