假设您有一个具有重载等号运算符的记录。
这是否是预期的行为?有什么解释吗?
TSomeRecord = record
Value : String;
class operator Equal(Left, Right : TSomeRecord) : Boolean;
end;
(实现比较字符串值)。如果将两条记录添加到列表中,这些记录根据重载运算符相等,我希望Contains
方法在两种情况下都返回true。但事实上,泛型列表似乎只比较记录的内存内容,而不是应用重载的等号运算符。
var
List : TList <TSomeRecord>;
Record1,
Record2 : TSomeRecord;
begin
Record1.Value := 'ABC';
Record2.Value := 'ABC';
List.Add(Record1);
Assert(List.Contains(Record1));
Assert(List.Contains(Record2)); // <--- this is not true
end;
这是否是预期的行为?有什么解释吗?
=
运算符,而且在代码中无法检测到任何特定类型是否支持它,因此默认实现必须对所有没有 a priori 知识的类型使用简单的内存比较。 - Rob Kennedy