2009-10-03 24 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属性来保存一个变体的包装器对象。

相关问题