Un'interfaccia insieme esprime solo che la collezione risultante può essere:
- testati per l'adesione
- enumerati sopra in qualche ordine arbitrario (che potrebbe cambiare)
un'interfaccia lista esprime il prima, ma il secondo è più forte, l'ordinamento è ben definito e non cambierà a meno che qualcosa lo istruisca.
Utilizzando un contratto meno restrittiva (set) si guadagna più libertà in quello che si può usare (si può caricare il set in qualsiasi ordine, per esempio, e nessuno con la tua classe dovrebbe preoccuparsi se questo ordinamento non è coerente)
Ho qui sorvolato sul fatto che l'insieme garantisce anche che non può contenere duplicati (che è un vincolo per gli implementatori). Tuttavia, se fosse necessario memorizzare tali istanze, un set sarebbe semplicemente inaccettabile, quindi questo cessa di essere un problema e invece diventa positivo. Il lavoro dei consumatori diventa ancora più facile in quanto non è necessario preoccuparsi che esistano duplicati in questo modo è già stato garantito per loro.
Un argomento in qualche modo correlato: http://stackoverflow.com/questions/1023697/why-have-hashset-but-not-set-in-c questo è per quanto riguarda il BCL rispetto allo specifico di NHibernate. –