最近跟数组打交道必较多,期间遇到了一些问题,在这里做一下总结.
X++中的数组分为两类:基础类型和AFC中的Array,区别在于前者只能存放X++基础类型(比如int,real)而不能存放class对象和Table,本文只讨论前者.
这里只叙述跟C#中不同的部分:
1.只支持一维数组;
不支持多维数组也没办法,只能说是编译器限制.
2.定义分为dynamic, fixed length, and partly on disk等三种不同类型;
3.索引从1开始;
索引0也可以用,给索引为0的元素赋值,将导致数组中所有的元素被清空.
X++中的数组    str aa[2];
X++中的数组    ;
X++中的数组    aa[
1]="aaa";
X++中的数组    aa[
2]="bbb";
X++中的数组    print    aa[
1]+" "+aa[2] ;
X++中的数组    aa[
0]="ccc";
X++中的数组    print aa[
1]+ " "+ aa[2];
X++中的数组    pause;
4.可用Array类型的EDT定义全局Array类型;
这样定义的数组类型,可以用来定义变量,也可以做为数据库的字段.
如果做为表的字段,在数据库中表现为跟数组EDT元素个数相同的字段,依次为 字段名称,字段名称1_,字段名称2_,比如系统中如果某个表中包含了Dimension类型的字段,取名为Dim,则依次有Dim,Dim1_和Dim2_,其类型为Dimension的基类型string.
数据库中的任何一个字段都可以用FiledNum函数取得某个字段的fieldId,对于数组类型的EDT,FiledNum取得的只是数组的第0个元素,不会对应具体的值,具体的值需要用
X++中的数组static FieldId fieldId2Ext(FieldId fieldId, int arrayIndex)
X++中的数组
这个函数取得,另外还有几个函数
static FieldId fieldExt2Id(FieldId fieldExtId)
取得Fieldid即数组的第0个元素;
static int fieldExt2Idx(FieldId fieldExtId)
取得arrayIdx;
好象说不明白,看代码吧.
X++中的数组static void ArrayFieldId(Args _args)
}
如何用表变量引用数组EDT的某个字段值那?跟普通的Array操作是一样的,用[]来引用.
X++中的数组static void Array(Args _args)
}

5.不能做返回参数;
这应该是编译器的缺陷,当然可以有变通的做法,采用AFC中的Array,这样就看不出Array的葫芦里卖的什么药了,有些,再说我只想返回一个整型数组,却非要我包成一个类,bt......
对于在EDT里定义的数组倒是可以做函数的返回参数,不过要注意一点,如果定义的数组EDT的基类型不是string,那么返回类型只能是Anytype,如果返回在EDT中定义的类型,编译通过不了,会报类型不匹配,真是bt到家了......
6.做入参时的约束.
这个也够BT的,在后面的文章中详细介绍一下.

相关文章:

  • 2021-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-27
  • 2021-12-24
  • 2022-12-23
  • 2021-09-11
猜你喜欢
  • 2022-12-23
  • 2021-08-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-17
相关资源
相似解决方案