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