重命名TValue数组类型

时间:2013-11-26 15:29:30

标签: arrays delphi

我一直在经历一个奇怪的事情,涉及重命名TValue数组类型,如;

TValueArray1 := TArray <TValue>;
TValueArray2 := Array of TValue;

我的意思是说他们不应该表现得相似吗? 我有一个方法,它有一个常量的TValue开放数组作为参数但是当我用任何TValueArray替换它时,编译器开始期待序数值,为什么?

例如,正常工作;

// G1 - TGUID; B1 - TBytes; I1 - Integer; S1 - String

procedure TAgBuffer.Add ( const AData: Array of TValue );
TAgBuffer.Add ( [(TValue.From <TGUID> ( G1 )), TValue.From <TBytes> ( B1 ), I1, S1] );

但在用任何TValueArray替换'TValue数组'后会出现以下编译错误: -

[dcc32 Error] Unit1.pas(44): E2001 Ordinal type required // for G1
[dcc32 Error] Unit1.pas(44): E2010 Incompatible types: 'Integer' and 'TValue' // for B1

2 个答案:

答案 0 :(得分:4)

你似乎在问为什么这两者是不同的:

procedure foo1(const a: array of Integer);
procedure foo2(const a: TArray<Integer>);

原因是foo1的参数是open arrayfoo2的参数是dynamic array。他们只是不同的野兽。了解开放数组参数与动态数组不同,这一点非常重要。

我的经验法则是你应该尽可能使用开放数组参数。原因是他们接受了最广泛的实际参数。

答案 1 :(得分:1)

这是一个链接,详细解释了开放数组和动态数组之间的区别

http://rvelthuis.de/articles/articles-openarr.html