Aquí podría ser tu PUBLICIDAD


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 TheArtTrooper
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 03:56
fuente por usuario TheArtTrooper


Aquí podría ser tu PUBLICIDAD


votos
1

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

Respondida el 12/03/2009 a las 04:49
fuente por usuario Alex B

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 04:53
fuente por usuario Davy Landman