TDictionary - неверный ключ - PullRequest
1 голос
/ 12 марта 2009

У меня есть такой код:

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 ]

1 голос
/ 20 марта 2009

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

1 голос
/ 12 марта 2009

Вы изменяете myDict внутри раздела, помеченного // other stuff?

0 голосов
/ 12 марта 2009

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

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

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

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

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

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

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

...