Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi IEnumerator<TObject> != IEnumerator<TObject> ? (https://www.delphipraxis.net/126890-ienumerator-tobject-%3D-ienumerator-tobject.html)

jbg 4. Jan 2009 10:53


IEnumerator<TObject> != IEnumerator<TObject> ?
 
Irgendwie mag mich der Delphi 2009 Compiler heute nicht oder ich stehe auf dem Schlauch.

Ich habe folgende Deklaration um einer TObjectList das IEnumerator<T> Interface "unterzujubeln".
Delphi-Quellcode:
type
  TEnumObjectList<T> = class(TInterfacedObject, IEnumerable<T>)
  private
    FList: TObjectList;
  public
    constructor Create(AList: TObjectList);
    function GetEnumerator: IEnumerator<T>;
  end;
Bei der Zuweisung an ein Interface spuckt mir der Compiler aus, dass die Methode "GetEnumerator" sich vom Interface unterscheidet.
Delphi-Quellcode:
var
  Enum: IEnumerable<TObject>;
begin
  Enum := TEnumObjectList<TObject>.Create(nil);
end;
Zitat:

[DCC Fehler] Unit1.pas(85): E2211 Deklaration von 'GetEnumerator' unterscheidet sich von der Deklaration in Interface 'IEnumerable<System.TObject>'
System.pas(452): Verwandtes Member: function GetEnumerator: IEnumerator;
Kann mir bitte jemand erklären was ich da falsch mache? Oder ob ich (mal wieder) einen QC-Report formulieren soll.

jbg 4. Jan 2009 11:13

Re: IEnumerator<TObject> != IEnumerator<TObject>
 
Jetzt habe ich doch noch eine Lösung gefunden.
Delphi-Quellcode:
  TEnumObjectList<T> = class(TInterfacedObject, IEnumerable<T>)
  private
    FList: TObjectList;
  public
    constructor Create(AList: TObjectList);
    function GetEnumerator: IEnumerator;
    function IEnumerable<T>.GetEnumerator = GetGenericEnumerator;
    function GetGenericEnumerator: IEnumerator<T>; overload;
  end;
Dabei wird mir zwar schlecht, aber wenns funktioniert. Und dafür habei ich heute den halben Vormittag verbraucht.

jbg 4. Jan 2009 11:26

Re: IEnumerator<TObject> != IEnumerator<TObject>
 
Das hilft leider auch nicht. Der Compiler bringt ständig IEnumerator und IEnumerator<T> durcheinandern. Da ich jetzt keine Luste mehr habe, werde ich wohl oder übel meinen eigenen IEnumerator schreiben. Danke CodeGear für die verschwendete Zeit. IEnumerable kann so niemand implementieren. Das Interface ist nutzlos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz