Delphi t字典-无效密钥

Delphi t字典-无效密钥,delphi,delphi-2009,tdictionary,Delphi,Delphi 2009,Tdictionary,我有这样的代码: type TMyDictionary = TDictionary<int, int>; var myDict: TMyDictionary; k, v: integer; // code to fill the dictionary for k in myDict.Keys do begin v := myDict.Items[k]; // other stuff end; 类型 TMyDictionary=

我有这样的代码:

type
  TMyDictionary = TDictionary<int, int>;

var
  myDict: TMyDictionary;
  k, v: integer;

  // code to fill the dictionary

  for k in myDict.Keys do
  begin
     v := myDict.Items[k];

     // other stuff
  end;
类型
TMyDictionary=TDictionary;
变量
myDict:TMyDictionary;
k、 v:整数;
//填充字典的代码
在myDict中为k。键可以
开始
v:=myDict.项目[k];
//其他东西
结束;
我随机看到在'v:=myDict.Items[k];'上抛出异常这说明k是无效的


其他人看到了吗?

您是否在标记为
//其他内容的部分中修改了
myDict

尝试用一种仅使用局部变量的方法重现此问题

可能是您使用了来自两个不同线程的变量,或者可能是您更新了myDict中的元素

我将试着解释我关于复制它的答案:

您应该创建一个可以在另一台计算机上运行的方法,并显示您得到的错误

例如(问题:我得到一个被零除的异常):

var
i:整数;
开始
i:=3;

虽然(i查看CodeCentral,我看到针对TDictionary,尤其是支持for…in…构造的枚举器出现了许多错误。

我没有在循环中修改myDict。我遍历字典中的每个部分以找到最大值。正如您所描述的。一个方法。只有一个线程。我在l中所做的一切oop正在寻找最大的“v”并将其存储在局部变量中。我的意思是,尝试制作一个示例过程来复制它,并将其发布到此处,以便其他人可以查看您的示例代码。以下是完整的循环:对于fcm中的k。键确实开始尝试v:=fcm.Items[k];如果v>max,则开始结果:=k;max:=v;结束;除了继续;结束;结束;
var
   i : integer;
begin
   i := 3;
   while (i <= 0) do
   begin
     Writeln(FloatToStr(20/i));
     Dec(i);
   end;
end