Delphi 1 16 Bit (ja es ist alt, aber es funktioniert gut)TStringList - merkwürdiges Verhalten
ein Beispielcode:
procedure TForm1.Button1Click(Sender: TObject);
var
SL: TStringList;
begin
SL := TStringList.Create;
SL.Sorted := True;
SL.Duplicates := dupIgnore;
SL.AddObject('A', TObject(100));
SL.AddObject('A', TObject(999));
ShowMessage(IntToStr(LongInt(SL.Objects[0]))); {A}
SL.Free;
end;
ich das Objektfeld mit Lange Ganz zu speichern (ein Hack Ja, aber es macht den Job erledigt. Wie auch immer, in Zeile A oben würde ich erwarten, dass ShowMessage 100 zeigt, stattdessen zeigt es 999 (auch wenn dupIgnore gesetzt ist). Fehle ich hier etwas? Oder sollte es so funktionieren (ich erwartete, dass die Stringliste die 999 ignoriert)?
[Die Delphi XE-Dokumentation] (http://docwiki.embarcadero.com/VCL/en/Classes.TStringList.AddObject) sagt nichts darüber. Es besagt nur, dass doppelte * Strings * ignoriert werden. Es sagt nichts darüber aus, was mit dem Objekt passiert, das an die doppelte Zeichenfolge gebunden ist. –
@Rob Kennedy - dupIgnore blockiert die Versuche doppelte Strings (mit oder ohne Objekte) zur sortierten Liste hinzuzufügen. Der zurückgegebene Index spielt in diesem Fall keine Rolle - String wird nicht zur Liste hinzugefügt. – kludg
Rob spricht nicht über die Zeichenfolge - es ist sicher nicht hinzugefügt. Er spricht über das * Objekt *, das an die Dupierkette gebunden ist. Die Dokumentation sagt nicht, was mit dem Objekt passiert. Bei früheren Versionen von Delphi ersetzt das Objekt, das mit ihm verknüpft ist, das vorherige Objekt, während die Duplizierungszeichenfolge nicht hinzugefügt wird. Es sollte als eine Designauswahl anstelle eines Fehlers betrachtet werden, wahrscheinlich ein schlechter, seit sie es geändert haben (ich habe einen Beitrag gesehen, der sich mit dem Jahr 2004 beschwert hat, so dass sich das Verhalten wahrscheinlich nach D7 geändert hat). –