如何使用Delphi一步初始化TList<T>?

8

我相信这是一个简单的问题,但我无法使它运行:

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

如何替换掉 ????? 以插入以下三个字符串:

'one'
'two'
'three'

谢谢。

创建列表,然后使用 FMyList.Add 插入。 - Kaitnieks
1
是的,我现在正在这样做,但我希望能够一步完成。 - ferpega
2个回答

17

不是一句话,而是两句话:

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

编辑:当然你可以将它与David的方法结合使用。


+1 我不熟悉 AddRange,谢谢指出。 - David Heffernan
谢谢Uwe,我想我不能把“被接受的答案”分配给David和你。两个答案都很好。再次感谢。 - ferpega
我认为在这里使用两行比一行更好,而且我反对构造函数的副作用。 - Warren P
一行变量声明。如果它是唯一的变量:使用 var 关键字的一行。因此,大约需要 3 到 4 行代码。 - Spongebob Comrade

6

没有一种单一的方法来完成这个任务。您可以编写自己的构造函数来实现此操作,如下所示:

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']);

更新

正如Uwe在他的答案中正确指出的那样,我展示的代码应该使用AddRange()方法:

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

我曾经询问过是否有一种现成的语言方式来实现它...但在缺乏这种功能的情况下,这是一个很好的近似方法... - ferpega
1
@FerPt 我知道那就是你所询问的,这也是我第一句话的意思。 - David Heffernan
我尝试使用Class Helpers来近似你的问题,但是没有成功。似乎无法在泛型上使用类助手... :-(看起来你的答案是Delphi XE中唯一有效的。 - ferpega

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接