Einzelnen Beitrag anzeigen

DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Assign für TDictionary implementieren

  Alt 4. Sep 2019, 12:06
Zeig mal die zugehörigen Uses-Anweisungen. TValue ist sowohl als generischer Typ in TDictionary als auch als relater Typ in System.RTTI deklariert. Eventuell hilft es die uses-Anwwisung etwas umzubauen.
Ich hab mal alles aus der Unit gelöscht, bis das hier übrig blieb (uses Rtti in Verbindung mit TValue in Foo verursacht das Problem):

Delphi-Quellcode:
unit MyUnit;

interface

uses
 Classes, generics.defaults, generics.Collections;

type
  TTest = class(TObject)
    procedure foo;
  end;

  TMyDictionary<TKey, TValue> = class(TDictionary<TKey, TValue>)
  public
    procedure Assign(Source: TObject); virtual;
  end;

implementation

uses
  Rtti;

procedure TTest.foo;
var
  V: TValue; <-- hier kommt das TValue aus der Rtti und muss es auch!
begin
end;

procedure TMyDictionary<TKey, TValue>.Assign(Source: TObject);
var
  LKey: TKey;
  LValue: TValue;
begin
  if Source is TMyDictionary<TKey, TValue> then
  begin
    for LKey in (Source as TMyDictionary<TKey, TValue>).Keys do
    begin
      LValue := (Source as TMyDictionary<TKey, TValue>).Items[LKey];
      Add(LKey, LValue); <-- **FEHLER**
    end;
  end
end;

end.
  Mit Zitat antworten Zitat