【问题标题】:Is TArray<T>.Create() documented somewhere?TArray<T>.Create() 是否记录在某处?
【发布时间】:2011-04-14 10:24:19
【问题描述】:

当我发现像这样的构造实际上可以编译并产生所需的结果时,这只是一个偶然:

var
  Arr: TArray<Integer>;
begin
  Arr := TArray<Integer>.Create(100, 101, 102);
end;

我只在 Delphi XE 中对其进行了测试,但它也可以在旧版本中使用。这是否记录在某处?

【问题讨论】:

  • 它也适用于 Delphi 2010,它似乎是编译器的魔法。 Embarcadero documentation here 说 TArray 来自 Generics.Collections 但它可以在不包含在 uses 子句中的情况下工作; Generics.Collections 中的源代码没有引用任何类型的构造函数。
  • TArray&lt;T&gt; 在System.pas 中声明为array of &lt;T&gt;。 Generics.Collection 声明了TArray,它提供了一些用于搜索和排序的通用类方法。

标签: arrays delphi generics


【解决方案1】:

它记录在language guide。

【讨论】:

  • 虽然这在当时可能是正确的,但现在不是(该死的维基!)
  • @jep 不,它今天仍然存在:为动态数组分配内存的另一种方法是调用数组构造函数
  • 啊,好吧,这就是你所指的。我以为你在谈论的不仅仅是一个简短的例子和那句话作为解释。我想它是文档,只是最小的一种,实际上并没有比问题中所说的更进一步。不过,这很公平,因为它在技术上是“记录在案的”。
【解决方案2】:

它是以下的通用版本,可以追溯到 Delphi 2007:

type
  TIntArray = array of Integer;

var
  MyIntArray: TIntArray;
begin
  MyIntArray := TIntArray.Create(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
  ...
end;

终于可以在不知道大小的情况下初始化数组了。

【讨论】:

  • 遗憾的是,如果不支持开放数组,它就相当残废了
  • 请注意,Delphi 2007 在 .NET 版本中支持泛型。在 de Win32 版本中,您必须获得 Delphi 2009。
  • @Johan:我从来没有说过任何关于泛型和 D2007 的事情。我说 OP 的代码 sn-p 是我发布的代码的通用版本,可在 D2007 中使用。 :)
  • 你在答案中拼错了 generic,让我走错了路。-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多