我需要一個類似於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類。 –