2008-11-28 109 views
4

我有一个TDictionary存储了一堆按名称索引的对象,我希望能够检查所有的对象。所以我试过这个:如何声明一个TDictionary枚举器?

var enumerator: TMyObject; 
begin 
    for enumerator in myDictionary do 

但那不会编译。 “不兼容的类型:‘TMyObject’和‘TPair’

所以我想它有点不同:

var enumerator: TPair<string, TMyObject>; 

这并没有任何编译此错误消息更奇怪:不兼容的类型:‘TPair’和“TPair”

因此很明显,我需要某种时髦的语法来列举我的字典里有为..在循环任何人都知道如何正确地申报其

编辑:?法比奥戈麦斯举了一个例子那正常工作,但我的代码仍然不会使用他的方法进行编译。也许是因为我在一个不同的单位工作?字典和它用于Value端的类都在一个单元中定义,并且此代码在其他位置。这是否使它成为编译器中的错误?任何人都可以验证此?

编辑2:发现问题。如果任何人有兴趣,请致电http://qc.embarcadero.com/wc/qcmain.aspx?d=69461

+0

这个问题真的是题外话? – mjn 2012-01-04 16:14:35

+0

@mjn:我关闭它,因为没有“结果我的代码很好,这是一个编译器错误”的原因。 – 2012-01-04 17:03:50

回答

7

这个作品也预计:

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; 

粘贴任何形式的FORMCREATE事件这段代码,看看自己。