TDictionary: clave no válida

votos
1

Tengo un código como este:

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;

Aleatoriamente veo una excepción lanzada en 'v: = myDict.Items [k];' que dice k es inválido.

¿Alguien más ha visto esto?

Publicado el 12/03/2009 a las 16:42
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
1

Al mirar CodeCentral, veo una serie de errores generados contra TDictionary y, en particular, el enumerador que admite el para ... en ... construir.

Respondida el 20/03/2009 a las 15:56
fuente por usuario

votos
1

¿Estás modificando myDictdentro de la sección etiquetada // other stuff?

Respondida el 12/03/2009 a las 16:49
fuente por usuario

votos
0

Intente reproducir este problema en un solo método con solo variables locales.

Podría ser que use la variable de 2 hilos diferentes, o tal vez actualice los elementos en myDict.

Trataré de explicar mi respuesta sobre cómo reproducirlo más:

Debe crear un método que pueda ejecutarse en otra computadora y mostrar el error que está recibiendo.

Entonces, por ejemplo (Pregunta: estoy obteniendo una excepción de dividir por cero):

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

Si ejecuta esto en una computadora, la gente obtendrá la excepción dividir por cero. Así que pude reproducir el problema. Intenta crear un fragmento lo más simple posible para reproducir de manera consistente el problema que tienes.

Respondida el 12/03/2009 a las 16:53
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more