AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi IEnumerator<TObject> != IEnumerator<TObject> ?
Thema durchsuchen
Ansicht
Themen-Optionen

IEnumerator<TObject> != IEnumerator<TObject> ?

Ein Thema von jbg · begonnen am 4. Jan 2009 · letzter Beitrag vom 4. Jan 2009
Antwort Antwort
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

IEnumerator<TObject> != IEnumerator<TObject> ?

  Alt 4. Jan 2009, 11:53
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.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: IEnumerator<TObject> != IEnumerator<TObject>

  Alt 4. Jan 2009, 12:13
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.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: IEnumerator<TObject> != IEnumerator<TObject>

  Alt 4. Jan 2009, 12:26
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 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