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