AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Typ für for each Schleife

Ein Thema von Björn Ole · begonnen am 13. Okt 2010 · letzter Beitrag vom 13. Okt 2010
Antwort Antwort
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#1

Typ für for each Schleife

  Alt 13. Okt 2010, 00:38
Delphi-Version: 2010
Huhu,

kurze Frage. Wie muss der Typ des Parameters AIn lauten, damit ich TList, TObjectList, Arrays etc. übergeben kann? Sollte später nicht nur mit Integers funktionieren. Würde mir gerne das overloading sparen.
Delphi-Quellcode:
function IsNumberIn(ANumber: integer; AIn: {TList, TObjectList, Array}): boolean;
var
  n: integer;
begin
  result := false;
  for n in AIn do
  begin
    if n = ANumber then
    begin
      result := true;
      Break;
    end;
  end;
end;
TEnumerator<integer> hab ich schon versucht, da kommt folgende Meldung:
Zitat:
E2431 for-in statement cannot operate on collection type 'Generics.Collections.TEnumerator<System.Integer>' because 'Generics.Collections.TEnumerator<System.Integer>' does not contain a member for 'GetEnumerator', or it is inaccessible

Gibts da ne Möglichkeit?
Gruß, Björn

Geändert von Björn Ole (13. Okt 2010 um 11:58 Uhr) Grund: "Muss das a nicht ein n sein?"
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Typ für for each Schleife

  Alt 13. Okt 2010, 08:45
Muss das a nicht ein n sein?

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Typ für for each Schleife

  Alt 13. Okt 2010, 08:51
IEnumerable<T> bzw. TEnumerable<T> dürfte sein, was du suchst
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: Typ für for each Schleife

  Alt 13. Okt 2010, 09:15
IEnumerable<T> bzw. TEnumerable<T> dürfte sein, was du suchst
Muß nicht unbedingt sein ... kann man auch selber machen.
Sooo große Hexerei steckt da nicht dahinter.

Die Klasse oder der Record, welche für For-In genutzt werden soll muß nur eine Public-Funktion Namens "GetEnumerator" besitzen, welche dann von Delphi aufgerufen wird.
Delphi-Quellcode:
TMeinListenTyp = class/record
  ...
  Function GetEnumerator: TMeinEnumerator;
end;
TMeinListenTyp ist quasi eine Liste/Array mit vielen TMeinTyp drinnen.

Und die Klasse TMeinEnumerator muß diese Funktionen und Property beinhalten:
Delphi-Quellcode:
TMeinEnumerator = Class
  Constructor Create(Const List: TMeinListenTyp);
  Function GetCurrent: TMeinTyp;
  Function MoveNext: Boolean;
  Property Current: TMeinTyp Read GetCurrent;
End;
Delphi-Quellcode:
var
  x: TMeinTyp;
  List: TMeinListenTyp;

for x in List do ...
Ach ja, TMeinEnumerator und TMeinListenTyp können auch ein und die selbe Klasse sein, mit überladenen Konstructoren für die normale Erstellung und die Erstellung des Enumerators.



Delphi-Quellcode:
TMeinListenTyp = Pecord
Private
  FList: array of TMeinTyp;
  FEnumIndex: Integer;
Public
  Constructor Create; overload;
  ...
  Function GetEnumerator: TMeinListenTyp;
  Constructor Create(List: TMeinListenTyp); overload;
  Function GetCurrent: TMeinTyp;
  Function MoveNext: Boolean;
  Property Current: TMeinTyp Read GetCurrent;
End;

Constructor TMeinListenTyp.Create(List: TMeinListenTyp);
  Begin
    FList := List.FList; // Werte speichern oder einfach nur eine Referenz auf List merken und dann darüber auf die Liste zugreifen
    FEnumIndex := -1;
  End;

Function TMeinListenTyp.GetCurrent: TMeinTyp;
  Begin
    Result := FList[FEnumIndex];
  End;

Function TMeinListenTyp.MoveNext: Boolean;
  Begin
    Result := FEnumIndex < Length(FList);
    If Result Then Inc(FEnumIndex);
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Okt 2010 um 09:19 Uhr)
  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 18:20 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