2009-06-30 6 views
7

Ho il seguente codice:Perché THashedStringList non ignora i duplicati?

var 
    sl: THashedStringList; 
begin 
    sl:= THashedStringList.Create; 
    sl.Duplicates := dupIgnore; 
    sl.Add('12345'); 
    sl.Add('12345'); 
    sl.Add('12345'); 
    sl.Add('12345'); 
    sl.Add('12345'); 
    sl.Add('12345'); 
    sl.Add('12345'); 
    ShowMessage(IntToSTr(sl.Count)); 
end; 

Ma quando vedo sl.Count, mi dà 7. Qual è il bug in questo?

risposta

15

È necessario impostare la proprietà Sorted su TRUE per fare in modo che l'elenco ignori i duplicati. La proprietà è ereditato da TStringList, e se si guarda la documentazione per TStringList.Duplicates troverete:

Nota: duplicati non fa nulla se l'elenco non è ordinato.

+4

E questo perché THashedStringList eredita la sua proprietà Duplicati da TStringList, nonché il suo comportamento per il metodo Aggiungi. Non c'è niente di speciale in THashedStringList nell'esempio di Pavan. –

+0

Grazie per il commento, ho modificato la risposta di conseguenza. – mghie

+0

Mi dispiace, errore stupido. – Pavan