【问题标题】:How to initialize a TList<T> in one step using Delphi?如何使用 Delphi 一步初始化 TList<T>?
【发布时间】:2011-04-24 11:40:01
【问题描述】:

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

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

如何插入而不是?????插入这 3 个字符串:

“一”
“二”
“三”

谢谢..

【问题讨论】:

  • 创建列表,然后使用 FMyList.Add 插入。
  • 是的,我现在就是这样做的,但我想一步到位。

标签: delphi generics generic-list


【解决方案1】:

不是单排,而是两排:

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

编辑:当然你可以把它和大卫的方法结合起来。

【讨论】:

  • +1 我对 AddRange 不熟悉,谢谢指出。
  • 谢谢 Uwe,我想我无法将“已接受的答案”分发给 David 和您。两者都是很好的答案。再次感谢。
  • 我觉得这里两行比一行好,我很遗憾构造函数的副作用。
  • 还有一行变量声明。如果它是唯一的变量:一行 var 关键字。所以在 3 到 4 行之间。
【解决方案2】:

没有单一的方法可以做到这一点。您可以编写自己的构造函数来执行此操作:

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;

【讨论】:

  • 我要求一种语言已经存在的方法...但是在没有此功能的情况下这是一个很好的近似值...
  • @FerPt 我知道这就是你要的,因此我的第一句话。
  • 我试图用类助手获得你的近似值......没有运气......似乎没有办法在泛型上使用类助手...... :-( 似乎你的答案在 Delphi XE 中是唯一有效的.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多