2008-11-28 110 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事件這段代碼,看看自己。