加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – 重命名TValue数组类型

发布时间:2020-12-15 09:18:50 所属栏目:大数据 来源:网络整理
导读:我一直在经历一个奇怪的问题,涉及重命名TValue数组类型; TValueArray1 := TArray TValue;TValueArray2 := Array of TValue; 我的意思是说他们不应该表现得相似吗? 我有一个方法,它有一个常量的TValue开放数组作为参数但是当我用任何TValueArray替换它时,编
我一直在经历一个奇怪的问题,涉及重命名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替换’Array of 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

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读