【发布时间】:2010-07-30 01:49:02
【问题描述】:
这是一般收藏大师的问题。
我很震惊地发现 TList 没有覆盖 equals。看看这个例子:
list1:=TList<String>.Create;
list2:=TList<String>.Create;
list1.Add('Test');
list2.Add('Test');
Result:=list1.Equals(list2);
“结果”为假,即使两个列表包含相同的数据。它使用默认的 equals() (它只是比较两个引用是否相等)。
查看代码,似乎所有其他泛型集合类型也是如此。
这是对的,还是我错过了什么??
如果在实践中尝试使用 TList,这似乎是一个大问题。我该如何解决这个问题?我是否创建自己的 TBetterList 来扩展 TList 并覆盖 equals 以做一些有用的事情? 或者我会遇到 Delphi 泛型的进一步复杂性......?
[编辑:到目前为止,我有一个答案,有很多赞成票,但它并没有真正告诉我我想知道什么。我会尝试重新表述这个问题]
在 Java 中,我可以这样做:
List<Person> list1=new ArrayList<Person>();
List<Person> list2=new ArrayList<Person>();
list1.add(person1);
list2.add(person1);
boolean result=list1.equals(list2);
result 将为 true。我不需要继承任何东西,它就可以工作。
如何在 Delphi 中做同样的事情?
如果我在 Delphi 中编写相同的代码,result 将结束 false。
如果有一个解决方案只适用于 TObjects 而不是 Strings 或 Integers 那么这也将非常有用。
【问题讨论】:
标签: delphi