2011-04-24 32 views
7

我相信這是一個簡單的問題,但我不能讓它運行:如何使用Delphi一步初始化TList <T>?

var 
    FMyList: TList<String>; 
begin 
    FMyList := TList<String>.Create(?????); 
end; 

如何插入而不是?????要插入此3個字符串:

'一'
'二'
'三化'

謝謝..

+0

創建列表,然後使用FMyList.Add插入。 – Kaitnieks 2011-04-24 11:58:26

+1

是的,我現在正在這樣做,但我想一步到位。 – ferpega 2011-04-24 12:05:49

回答

5

還有就是要做到這一點沒有任何單一的方法。你可以寫你自己的構造這樣做,因爲這樣:

constructor TMyList<T>.Create(const Values: array of T); 
var 
    Value: T; 
begin 
    inherited Create; 
    for Value in Values do 
    Add(Value); 
end; 

然後,你可以寫:

FList := TMyList<string>.Create(['one', 'two', 'three']); 

更新

由於烏韋正確地在他的回答中指出,我出示的代碼應該使用AddRange()方法:

constructor TMyList<T>.Create(const Values: array of T); 
begin 
    inherited Create; 
    AddRange(Values); 
end; 
+0

我正在尋求一個languaje-已經存在的方式來做到這一點......但是,這是一個很好的近似,因爲沒有這個功能...... – ferpega 2011-04-24 12:41:14

+1

@FerPt我知道這就是你要求的,因此我的第一句話。 – 2011-04-24 12:44:02

+0

我試圖用類助手讓你逼近......沒有運氣..似乎沒有辦法使用仿製藥類幫手...... :-( 看來你的答案是德爾福XE是唯一有效的。 – ferpega 2011-04-24 13:53:10

15

不是一個襯墊,但兩個班輪:

FMyList := TList<String>.Create; 
FMyList.AddRange(['one', 'two', 'three']); 

編輯:當然,你可以與大衛的做法結合起來。

+0

+ 1我對AddRange並不熟悉,謝謝指出它 – 2011-04-24 16:24:51

+0

感謝Uwe,我想我不能向大衛和你發佈'接受的答案',兩者都是很好的答案 再次感謝 – ferpega 2011-04-25 08:27:55

+0

我認爲兩條線是比這裏的一行更好,我對構造函數的副作用感到痛惜 – 2011-04-25 22:29:39