0

我刚刚发现了泛型(我知道很惊讶!)并立即爱上了它......直到我发现[DCC Fatal Error] F2084 Internal Error: L1737如果我有这个代码,Delphi 2010(安装了更新 4 和 5)会失败并显示可怕的消息:

// 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;

准确地说,除非我评论这一行,否则 Delphi 无法编译Enum := IDsList[i].GetEnumerator;

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

PS。我对 Delphi 并不陌生,只有泛型!

4

1 回答 1

5

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

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

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

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

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

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

于 2013-01-04T13:59:08.383 回答