2010-08-08 1 views
7

Ecco la mia strategia per la scelta di quale tipo C# di raccolta da utilizzare:Cosa manca a questa strategia di scelta della collezione C# da utilizzare?

  • se è fisso il numero di elementi nella raccolta, quindi utilizzare un serie, ad esempio:

    string [] direzioni = nuova stringa [] {"nord", "sud", "est", "ovest"};

  • altrimenti utilizzare sempre List<T>

  • a meno che naturalmente è necessario un insieme più specializzata, per esempio Stack<T>, Queue<T>, or Dictionary<TKey, TValue>

  • ma mai usare ArrayList più

Sulla base della sua esperienza, ciò che manca da questa strategia?

+0

Non sei sicuro di sapere perché si tratta di wiki della comunità? –

+0

Ho pensato che fosse buona norma marcare le domande di opinione come wiki della comunità. Non c'è una risposta specifica a questa domanda, voglio solo mettere la mia strategia là fuori e vederla basandomi sull'esperienza degli altri, se c'è qualcosa che mi manca che dovrei sapere. –

+0

La mia opinione è che se ci sono risposte dimostrabilmente sbagliate, non appartiene come wiki della comunità. –

risposta

5

Direi che nella maggior parte dei casi, anche se conoscessi il numero di elementi in una raccolta, utilizzerei List, semplicemente per il numero di funzioni di utilità che fornisce e compatibilità con LINQ.

Le hashmap sono un caso di utilizzo importante, per quando si desidera un accesso più rapido agli elementi all'interno della raccolta.

7

Le tue regole funzionano bene.

Inoltre:

  • perfer sempre collezioni generici (o specializzati) su ungeneric (object basati su quelli).
  • Utilizzare HashSet<T> se si desidera verificare la mera esistenza anziché i valori-chiave-mapping (che sono rappresentati tramite).
  • In caso di dizionari, prendere in considerazione l'uso di mappe ordinate (SortedList<...>, SortedDictionary<...>) se l'ordine sembra importante.
  • Utilizzare gli elenchi collegati se sono state rimosse/inserite operazioni nel mezzo.

e, naturalmente, il più importante:

  • Mai esportare tipi di raccolta in cemento: utilizzare sempre l'interfaccia più generale, che è - nella maggior parte dei casi - IList<T> o IEnumerable<T>.
1

È anche possibile utilizzare Collection<T> se si prevede di sovrascrivere i metodi aggiungi/rimuovi/cancella in una classe ereditata perché esistono metodi virtuali.