You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AX 2012中能否在类内声明自定义类的数组变量?

AX 2012中能否在类内声明自定义类的数组变量?

当然可以实现,但你用的写法不符合AX 2012的X++语法规范,所以才会报错。下面我给你讲正确的实现方式:

首先要明确:X++里对于自定义类的数组,不能直接用classX[]这种语法(这种写法仅适用于int、str这类基本数据类型),必须借助系统提供的Array类来实现。

正确的实现步骤

1. 先确保你的DataContract类定义正确

你的两个DataContract类基础结构是对的,这里可以保留:

[DataContractAttribute]
public class classX
{
    // 可以根据需求添加带DataMemberAttribute的成员变量和对应的get/set方法
}

[DataContractAttribute]
public class classY
{
    // 我们在这里声明数组变量
}

2. 声明并初始化自定义类数组

分两种场景:

  • 作为classY的成员变量:
    先在类的声明段定义Array类型的变量,然后在构造方法里初始化,指定元素类型为你的自定义类:

    [DataContractAttribute]
    public class classY
    {
        Array error; // 声明成员变量
    
        public void new()
        {
            super();
            // 初始化数组:第一个参数指定类型为Class,第二个参数传入classX的类编号
            error = Array::create(types::Class, classNum(classX));
        }
    }
    
  • 作为方法内的局部变量:
    直接在方法里声明并初始化即可:

    public void someMethod()
    {
        Array error = Array::create(types::Class, classNum(classX));
        
        // 给数组添加元素的示例(注意X++数组索引从1开始)
        classX newObj = new classX();
        error.value(1, newObj);
    }
    

几个关键注意点

  • X++的数组索引是从1开始的,和很多常见语言(比如C#、Java)的0起始索引不一样,操作数组时要留意。
  • 如果你需要对DataContract类进行序列化,记得给类里的成员变量加上[DataMemberAttribute],否则序列化时会丢失数据。
  • 用Array类的value()方法可以读取或设置指定索引的元素,用lastIndex()可以获取数组当前的元素个数。

这样调整后,你就能在classY里正常使用存储classX对象的数组了。

备注:内容来源于stack exchange,提问作者RSD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 07:05:30