2012-06-29 19 views
5

Dize sözlüğünü, varyant dizisini alan bir işleve sahip olmak isterim. Ben yapmak istiyorum neDinamik dizili bir değeri değer türü olarak belirtebilir miyim?

class function TSearch.Values(const arguments: array of variant): TList<variant>; 
var 
list : TList<variant>; 
item: variant; 
begin 
    list := TList<variant>.Create; 
    for item in arguments do 
    begin 
     list.Add(item); 
    end; 
    Result := list;   
end; 

geçerli: tsearch gösterir bir sınıf olduğu

searchDictionary := TDictionary<string, TList<variant>>.Create; 
    searchDictionary.Add('BIN_NAME', TSearch.Values(['X01%', '%D01'])); 

tarafından

searchDictionary := TDictionary<string, array of variant>; 
    searchDictionary.Add('KEY_NAME', ['X01%', '%D01']); 
    aValue := TDtoClass.Search(searchDictionary) 

Şu anda bu ulaşmada ediyorum: Yani ile çağrılabilir:

searchDictionary.Add('BIN_NAME', ['X01%', '%D01']); 

yerine:

searchDictionary.Add('BIN_NAME', TSearch.Values(['X01%', '%D01'])); 

Herhangi bir yardım büyük takdir edilecektir.

+0

çalışmıyor Ne Gerekli varyant dizisini almak için özel bir yapısı kullanabilir? Derleme yapmıyor mu (ve hangi konumda)? – jpfollenius

+0

.Add (Ad: string; a: const dizisi)? – Marck

+0

Aslında bu açık bir diziden ziyade dinamik bir dizidir. Açık diziler sadece prosedür parametreleri olarak mevcuttur. Soru başlığını güncelledim. –

cevap

9

Sözlüğü bildirmede bir sorun olmamasına rağmen, değerler eklemek biraz zor olabilir. İstediğiniz gibi

var 
    searchDictionary: TDictionary<string, TArray<variant>>; 
begin 
    searchDictionary.Add('BIN_NAME', TArray<variant>.Create('X01%', '%D01')); 
end; 
+0

Tam olarak istediğim bu. Sınıf öğelerine gerek kalmadan dizi öğelerini tek bir satırda eklemenin bir yolu (ve ek olarak gerekli olan ek kullanım girdisi). Teşekkürler! – reckface

+0

Bildirimde bulunan jenerik türün kullanımı eşleştirmesi önemli midir, yoksa Reckface'in '' Variant dizisi '' çalışmasının da kullanıldığı orijinal beyanı da olabilir mi? –

+1

@Rob Kennedy, hayır işe yaramıyor. Derleyici, "TArray " ve "Variant dizisi" arasında ayrım yapar. –

0

Daha kod yapmak varyantın dizisi için bir tür bildirebilirsiniz: Tam

type 
    TDynamicArrayOfVariant = array of Variant; 

var 
    searchDictionary: TDictionary<string, TDynamicArrayOfVariant>; 
begin 
    searchDictionary.Add('BIN_NAME', ['X01%', '%D01']); 
end; 
İlgili konular