Thema: Delphi Enumerator Problem

Einzelnen Beitrag anzeigen

TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.159 Beiträge
 
Delphi 12 Athens
 
#4

AW: Enumerator Problem

  Alt 12. Okt 2025, 10:48
Hallo,

ja damit komme ich einen Schritt weiter:

Leider ist das mit IEnumerator echt nicht so schön, da du GetCurrent mit unterschiedlichen Rückgabewerten brauchst. Overload geht nicht, da beide keine Parameter haben. Du musst daher eine der Methoden anders nennen und umleiten. Das funktioniert so:
Delphi-Quellcode:
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
    function GetCurrent: TObject;
    function MoveNext: Boolean;
    procedure Reset;
    function IEnumerator<TProductTreeItem>.GetCurrent = GetCurrentT;
    function GetCurrentT: TProductTreeItem;
Aber: wenn ich jetzt irgendwo sowas tun will:

Delphi-Quellcode:
TMyClass.DoSomething(ProductData : IEnumerator<TProductTreeItem>;);
begin
  for var TreeItem in ProductData do
    ;
end;
Dann meckert der Compiler:
[dcc32 Fehler] ProductManagerTreeDisplay.pas(139): E2431 for-in-Anweisung arbeitet nicht mit Kollektionstyp 'System.IEnumerator<ProductTreeItem.TProductTreeIt em>', weil 'System.IEnumerator<ProductTreeItem.TProductTreeIt em>' kein Element für 'GetEnumerator' enthält oder darauf nicht zugegriffen werden kann

Nur hab' ich noch nicht kapiert wie ich GetEnumerator umsetzen muss. Alle Versuche bisher scheiterten.
z. B. sowas hier:

Delphi-Quellcode:
function GetEnumerator: IEnumerator<TProductTreeItem>;
function IEnumerator<TProductTreeItem>.GetEnumerator = GetEnumeratorT;
function GetEnumeratorT: IEnumerator<TProductTreeItem>;
Grüße
TurboMagic
  Mit Zitat antworten Zitat