Delphi Generics TDictionary导致[DCC致命错误] F2084内部错误:L1737消息

时间:2013-01-04 13:45:44

标签: delphi generics delphi-2010

我刚刚发现了仿制药(我知道这太惊人了!)并立刻爱上了它...直到我发现Delphi 2010(安装了更新4& 5)失败并带有可怕的[DCC Fatal Error] F2084 Internal Error: L1737消息,如果我有这个代码:

// Global array of list
IDsList : Array [1..5] Of TDictionary<Int64, Int64>;

function MyProc;
var
   i : Integer;
   Enum : TDictionary<Int64, Int64>.TPairEnumerator;
begin
     // ...
     Enum := IDsList[i].GetEnumerator;
     while Enum.MoveNext do
     begin
          // ...
     end;
end;

确切地说,除非我对此行Enum := IDsList[i].GetEnumerator;

发表评论,否则Delphi无法编译

使用数组大大简化了我的代码,有没有办法避免这个L1737错误消息?

PS。我不是Delphi的新手,只是泛型!

1 个答案:

答案 0 :(得分:5)

一旦MyProc声明中的错误得到修复,该代码将在我的Delphi 2010上编译。实际代码中可能还有其他内容会导致内部错误。

无论如何,在这里使用for/in循环更有意义:

var
  Pair: TPair<Int64, Int64>;
....
for Pair in IDsList[i] do
  DoSomething(Pair);

也许如果你这样做,你就逃脱了内部错误。

如果切换到for/in没有回避内部错误,那么您需要提供一个显示故障的完整程序。尝试将其切割成尽可能小的尺寸。在提问,提交错误报告等时,这总是很好的做法。

根据我的经验,如果你想做任何严肃的泛型编程,而不是淹没在大量的内部错误中,你需要超越Delphi 2010。