2008-11-28 8 views
4

J'ai un TDictionary qui stocke un tas d'objets indexés par nom, et j'aimerais pouvoir examiner tous les objets. J'ai donc essayé ceci:Comment déclarer un énumérateur TDictionary?

var enumerator: TMyObject; 
begin 
    for enumerator in myDictionary do 

Mais cela ne serait pas compilé. « Types incompatibles: 'TMyObject' et 'TPair'

Alors je l'ai essayé un peu différemment.

var enumerator: TPair<string, TMyObject>; 

Cela n'a pas compilé soit Ce message d'erreur est encore plus étrange: Types incompatibles: 'TPair' et « TPair »

donc apparemment je besoin d'une sorte de grammaire funky énumérer mon dictionnaire avec un pour .. en boucle Tout le monde sait comment déclarer correctement

EDIT:.? Fabio Gomes a donné un exemple cette fonctionne correctement, mais mon code ne compile toujours pas en utilisant sa méthode. Peut-être que c'est parce que je travaille dans une autre unité? Le dictionnaire et la classe qu'il utilise pour le côté Valeur sont tous deux définis dans une unité, et ce code est ailleurs. Est-ce que cela en fait un bug dans le compilateur? Quelqu'un peut-il vérifier cela?

EDIT 2: a trouvé le problème. http://qc.embarcadero.com/wc/qcmain.aspx?d=69461 si quelqu'un est intéressé.

+0

Cette question est vraiment hors-sujet? – mjn

+0

@mjn: Je l'ai fermé de cette façon car il n'y avait pas de "mon code est correct, c'est une erreur de compilation" raison proche. –

Répondre

7

Cela fonctionne exactement comme prévu:

var 
    Enum: TPair<string, TForm>; 
    MyDict: TDictionary<string, TForm>; 
begin 
    MyDict := TDictionary<string, TForm>.Create; 
    try 
    MyDict.Add('Form1', Self); 
    for Enum in MyDict do 
     ShowMessage(Enum.Key); 
    finally 
    MyDict.Free; 
    end; 

coller ce code en cas FormCreate de toute forme et de voir par vous-même.

+1

Dans Delphi 2009, il ne fonctionne pas (ou pas toujours), un bug est signalé dans QC: http://qc.embarcadero.com/wc/qcmain.aspx?d=75543 – mjn

+0

Notez que [QualityCentral a maintenant été fermé ] (https://community.embarcadero.com/blogs/entry/quality-keeps-moving-forward), vous ne pouvez plus accéder aux liens 'qc.embarcadero.com'. Si vous avez besoin d'accéder aux anciennes données de QC, regardez [QCScraper] (http://www.uweraabe.de/Blog/2017/06/09/how-to-save-qualitycentral/). –

Questions connexes