我需要一个类似于TStringList的类,它可以管理名称&值对,但值部分是变体。或者也许它有一个像TStringList.Object这样的属性,但保存变体而不是对象。需要一个类似于TStringList的名称=值类,但值部分是变体
任何人都可以请我指向一个免费或开源的实现吗?我使用Delphi 7.
谢谢。
我需要一个类似于TStringList的类,它可以管理名称&值对,但值部分是变体。或者也许它有一个像TStringList.Object这样的属性,但保存变体而不是对象。需要一个类似于TStringList的名称=值类,但值部分是变体
任何人都可以请我指向一个免费或开源的实现吗?我使用Delphi 7.
谢谢。
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);
做TObject(lItem)安全吗? – bejo
这就是为什么我建议TObject包装变体... –
是的,它的安全。 http://stackoverflow.com/questions/367130/i-want-to-assign-a-record-to-tstringlist-objects – inzKulozik
你还没有给出这个Delphi版本的用途,但从Delphi 2009开始,你可以使用TDictionary<string, Variant>
。
如果您有德尔福2009或2010,您可以使用中的TStringList<T>
类创建TStringList<Variant>
。 (你也可以使用TDictionary,但是TStringList有很多额外的功能,你可能不想丢失。)
你可以从TStringList派生并使用Objects属性来保存一个变体的包装器对象。
你使用的是什么Delphi版本? D2009及以上版本具有可用于此的通用TDictionary类。 –