【发布时间】:2015-07-06 13:18:15
【问题描述】:
升级到 XE8 后,我们的一些项目开始破坏数据。看起来像 TList 实现中的一个错误。
program XE8Bug1;
{$APPTYPE CONSOLE}
uses
System.SysUtils, Generics.Collections;
type
TRecord = record
A: Integer;
B: Int64;
end;
var
FRecord: TRecord;
FList: TList<TRecord>;
begin
FList := TList<TRecord>.Create;
FRecord.A := 1;
FList.Insert(0, FRecord);
FRecord.A := 3;
FList.Insert(1, FRecord);
FRecord.A := 2;
FList.Insert(1, FRecord);
Writeln(IntToStr(FList[0].A) + IntToStr(FList[1].A) + IntToStr(FList[2].A));
end.
此代码在 XE7 和之前的版本中打印“123”(应该如此),但在 XE8 中它打印“120”。 也许有人知道这个的快速修复?
更新:非官方修复是here
【问题讨论】:
-
通用集合已在 XE8 中重新实现。也许他们在 Emba 没有任何单元测试。如果这是您所描述的,并且看起来很可能,您的解决方案是保留在 XE7 上。您确实需要提交错误报告。
-
因此,Embarcadero 似乎没有有效的测试制度。他们到底怎么会弄错这个?这样的基础课。一个运行良好的开发团队会对此进行全面的单元测试。这样的故障不应该通过测试。惨淡。
-
而且我必须支付额外费用才能修复这个(4 周前)产品的错误。
-
相关:stackoverflow.com/questions/30850911/… 我猜他们认为没有人需要使用
Insert,所以他们从未测试过。
标签: delphi generics tlist delphi-xe8