TArray<T>.Create() 在哪里有文档记录?

13

仅仅是偶然的机会,我发现这样的语法结构实际上能够编译并且产生所期望的结果:

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

我只在 Delphi XE 中进行了测试,但它可能也适用于旧版本。这个有文档记录吗?


1
它在 Delphi 2010 中也适用,似乎是编译器魔法。Embarcadero文档在此指出TArray<T>来自于“Generics.Collections”,但它可以在uses子句中不包含该单元而正常工作;“Generics.Collections”中的源代码并未涉及任何类型的构造函数。 - Cosmin Prund
4
TArray<T>System.pas 中声明为 array of <T>Generics.Collection 声明了 TArray ,它提供了一些通用的类方法来进行搜索和排序。 - Uwe Raabe
2个回答

14

1
虽然这在过去可能是正确的,但现在不再是这样了(该死的维基!) - jep
@jep 不,今天它仍然存在:为动态数组分配内存的另一种方法是调用数组构造函数 - David Heffernan
2
啊,好的,我明白你指的是什么了。我以为你在谈论比一个简短的例子和一行解释更多的东西。我想这只是文档,最基本的那种,实际上并没有超出问题中所述的范围。虽然这样做还算可以,因为它在技术上是“有文档记录”的。 - jep

12

这是以下代码的通用版本,可以在 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;

现在终于有一种解决方案,可以在不知道数组大小的情况下初始化数组了。


很遗憾,它没有支持开放数组,这使得它相当不完整。 - David Heffernan
请注意,Delphi 2007仅支持.NET版本中的泛型。如果您想在Win32版本中使用泛型,则需要使用Delphi 2009。 - Johan
@Johan:我从未提到过泛型和D2007。我说的是OP的代码片段是我发布的代码的通用版本,可以在D2007中运行。 :) - Ken White
你在回答中拼错了generic,让我有些困惑。-) - Johan

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