Tengo este pico para probar TPair. Puede copiar y pegar en una nueva aplicación de consola Delphi XE. He marcado la línea con la excepción:Delphi TPair Exception
Proyecto Project1.exe elevó excepción EAccessViolation clase con el mensaje 'violación de acceso en la dirección 0045042D en el módulo 'Project1.exe'. Lectura de dirección A9032D0C.
¿Alguna idea?
Gracias.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Generics.Defaults,
Generics.Collections;
type
TProduct = class
private
FName: string;
procedure SetName(const Value: string);
published
public
property Name: string read FName write SetName;
end;
type
TListOfProducts = TObjectDictionary<TProduct, Integer>;
{ TProduct }
procedure TProduct.SetName(const Value: string);
begin
FName := Value;
end;
var
MyDict: TListOfProducts;
MyProduct1: TProduct;
MyProduct2: TProduct;
MyProduct3: TProduct;
APair: TPair<TProduct, Integer>;
aKey: string;
begin
try
MyDict := TListOfProducts.Create([doOwnsKeys]);
MyProduct1 := TProduct.Create;
MyProduct1.Name := 'P1';
MyProduct2 := TProduct.Create;
MyProduct2.Name := 'P2';
MyProduct3 := TProduct.Create;
MyProduct3.Name := 'P3';
MyDict.Add(MyProduct1, 1);
MyDict.Add(MyProduct2, 2);
MyDict.Add(MyProduct3, 3);
APair := MyDict.ExtractPair(MyProduct1);
Writeln(APair.Key.Name); // <--- Error is Here.
Writeln(IntToStr(APair.Value));
Readln(aKey);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Dice '// <--- Error is Here', pero no dice cuál es el error en realidad. Sabiendo que eso hace que sea más fácil ayudar cuando no tienes una copia de XE instalada en la máquina, estás leyendo SO de minuto a minuto. –
Lo siento ... He agregado el mensaje de error de excepción concreta. – ferpega
¡Es un misterio, no puedo ver un problema en mi vida! –