Вычитываю XML, добавляю в TObjectDictionary
TAssetType = record
padding : Byte;
directory : String;
FileExt : String;
end;
TAssetBoolType = array[Boolean] of TAssetType; //False - unpacked, True - packed;
TAssetClass = class
private
fVal : TAssetBoolType;
function Get(T: Boolean): TAssetType;
public
property Val[T: Boolean] : TAssetType read Get; default;
constructor Create;
end;
----------------
fUOPAssets := TObjectDictionary<Byte,TAssetClass>.Create([doOwnsValues]);
for i := 0 to XMLDoc.Root.ItemCount - 1 do
begin
XML_Element := XMLDoc.Root.Items[i];
...
if not fUOPAssets.TryGetValue(Num,AssetClass) then
AssetClass := TAssetClass.Create;
AssetClass.fVal[IsFilePacked].padding := XML_Element.Properties.IntValue('resourcetpaddingype',0);
AssetClass.fVal[IsFilePacked].directory := XML_Element.Properties.Value('directory','').ToLower;
AssetClass.fVal[IsFilePacked].FileExt := XML_Element.Properties.Value('suffix','').ToLower;
fUOPAssets.AddOrSetValue(Num, AssetClass);
end;
Какого-то беса результат TAssetClass.Create - есть указатель на тот же адрес, что и в прошлой итерации цикла. Уже и перекрывал конструктор, без толку.
Вроде просто всё, проще некуда. А не работает, точнее работает неправильно.
Содержимое словаря в приложенной картинкой, стрелками разных цветов выделил дублирующиеся указатели на объект.
Словарь заполняется один раз, освобождается в конце работы, в процессе - только чтение.
Что я делаю не так?