2009-10-03 22 views
0

我需要一個類似於TStringList的類,它可以管理名稱&值對,但值部分是變體。或者也許它有一個像TStringList.Object這樣的屬性,但保存變體而不是對象。需要一個類似於TStringList的名稱=值類,但值部分是變體

任何人都可以請我指向一個免費或開源的實現嗎?我使用Delphi 7.

謝謝。

+0

你使用的是什麼Delphi版本? D2009及以上版本具有可用於此的通用TDictionary類。 –

回答

1
PVariantRec = ^TVariantRec; 
TVariantRec = record 
    Value : Variant; 
end; 

var 
    lItem : PVariantRec; 
    lMyStringList : TStringList; 

lMyStringList := TStringList.Create; 
lMyStringList.Sorted := true; 
lMyStringList.OwnObjects := false; 

//add 
New(lItem); 
lItem.Value := 'zzz'; 
lMyStringList.Add('name', TObject(lItem)); 

//remove 
lItem := PVariantRec(lMyStringList.Objects[0]); 
Dispose(lItem); 
lMyStringList.Delete(0); 
+0

做TObject(lItem)安全嗎? – bejo

+1

這就是爲什麼我建議TObject包裝變體... –

+0

是的,它的安全。 http://stackoverflow.com/questions/367130/i-want-to-assign-a-record-to-tstringlist-objects – inzKulozik

4

你還沒有給出這個Delphi版本的用途,但從Delphi 2009開始,你可以使用TDictionary<string, Variant>

3

如果您有德爾福2009或2010,您可以使用中的TStringList<T>類創建TStringList<Variant>。 (你也可以使用TDictionary,但是TStringList有很多額外的功能,你可能不想丟失。)

3

你可以從TStringList派生並使用Objects屬性來保存一個變體的包裝器對象。

相關問題