Delphi 1中的16位(是它的老,但它工作得很好)的TStringList - 古怪的行爲
一些示例代碼:
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;
我使用的對象字段存儲longints(一劈,是的,但它完成了工作)。無論如何,在上面的A行我希望ShowMessage顯示100,而不是顯示999(即使dupIgnore設置)。我在這裏錯過了什麼嗎?或者它應該以這種方式工作(我希望stringlist忽略999)?
[Delphi XE文檔](http://docwiki.embarcadero.com/VCL/en/Classes.TStringList.AddObject)沒有提到它。它只是說重複*字符串*被忽略。它沒有說明綁定到重複字符串的對象會發生什麼。 – 2010-11-01 17:15:49
@Rob Kennedy - dupIgnore阻止嘗試添加重複的字符串(帶或不帶對象)到排序列表。返回的索引在這種情況下無關緊要 - 字符串不會添加到列表中。 – kludg 2010-11-01 17:35:19
羅布不是在談論這個字符串 - 它肯定不會被添加。他談論了綁在絃樂器上的*物體*。文檔沒有說明對象發生了什麼。在早期版本的Delphi中,雖然不添加重複字符串,但綁定到它的對象會替換先前的對象。它應該被認爲是一個設計選擇,而不是一個bug,可能是一個錯誤,因爲他們改變了它(我見過一個投訴日期爲2004年,所以行爲可能在D7之後改變)。 – 2010-11-01 23:22:01