Qual è il vero vantaggio di restituire ICollection < T > invece di un elenco < T > ;? [duplicare]
-
06-07-2019 - |
Domanda
Ho letto un paio di post sul blog che menzionano che per le API pubbliche dovremmo sempre restituire ICollection (o IEnumerable) invece di List. Qual è il vero vantaggio di restituire ICollection anziché un elenco?
Grazie!
Duplicato: Qual è la differenza tra Elenco (di T) e Collezione (di T)?
Soluzione
Un enumeratore restituisce solo un'entità alla volta mentre si scorre su di essa. Questo perché utilizza un rendimento> . Una raccolta, invece, restituisce l'intero elenco, richiedendo che l'elenco sia completamente archiviato in memoria.
La risposta breve è che gli enumeratori sono più leggeri ed efficienti.
Altri suggerimenti
Ti dà più libertà nella scelta della struttura di dati Sottostante.
Un elenco presuppone che l'implementazione supporti l'indicizzazione, ma ICollection non fa tale ipotesi.
Ciò significa che se scopri che un Set può fornire prestazioni migliori poiché l'ordinamento è irrilevante, sei libero di cambiare il tuo approccio senza influenzare i clienti.
È l'incapsulamento di base.
Penso che IList sarebbe più appropriato, ma ...
ICollection è solo un'interfaccia, mentre List è un'implementazione specifica di tale interfaccia. E se volessi utilizzare in seguito un altro contenitore oltre a un elenco? Se esponi pubblicamente un'interfaccia ICollection, puoi cambiare il tuo contenitore interno in qualcos'altro in seguito, purché il nuovo contenitore implementi anche l'interfaccia ICollection.