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;

Случайно я вижу исключение, генерируемое в 'v:= myDict.Items[k];' который говорит, что k недействительно.

Кто-нибудь еще видел это?

3 ответа

Решение

Глядя на CodeCentral, я вижу ряд ошибок, возникших в TDictionary и, в частности, в перечислителе, который поддерживает конструкцию for ... in ....

Вы модифицируете myDict внутри раздела с надписью // other stuff?

Попробуйте воспроизвести эту проблему в одном методе только с локальными переменными.

Возможно, вы используете переменную из двух разных потоков или, возможно, обновляете элементы в myDict.

Я попытаюсь объяснить мой ответ о воспроизведении этого больше:

Вы должны создать один метод, который мог бы работать на другом компьютере и показать ошибку, которую вы получаете.

Так, например (Вопрос: я получаю исключение деления на ноль):

var
   i : integer;
begin
   i := 3;
   while (i <= 0) do
   begin
     Writeln(FloatToStr(20/i));
     Dec(i);
   end;
end

Если вы запустите это на компьютере, люди получат исключение деления на ноль. Таким образом, я смог воспроизвести проблему. Постарайтесь создать фрагмент как можно проще, чтобы согласованно воспроизвести проблему, с которой вы столкнулись.

Другие вопросы по тегам