如何获得数组的长度?

时间:2013-09-30 06:48:31

标签: x++ dynamics-ax-2012 axapta

如何获取字符串数组的长度,如

str 30 name[];//dynamic array

我使用以下内容来获取长度,但它显示错误为“变量不属于CLASS类型。”

int len=name.get_length();

3 个答案:

答案 0 :(得分:4)

听起来您可能更乐意使用Array 集合类

http://msdn.microsoft.com/en-us/library/array.aspx

static void TestArray(Args _args)
{
    Array   strArray = new Array(Types::String);
    ;

    strArray.value(1, 'abc');
    strArray.value(2, 'def');

    info(strfmt("%1", strArray.lastIndex()));
}

答案 1 :(得分:2)

您需要dimOf功能。看一下参考文献:

http://msdn.microsoft.com/en-us/library/aa597117.aspx

答案 2 :(得分:2)

抱歉,没有内置函数来返回字符串数组大小。由于您可以完全控制放入数组中的内容,因此无需任何操作!

内置函数dimof返回数组的已分配大小,这对于像str 30 name[20]这样的固定大小数组来说只有实际价值,其中dimof(name)返回20。

保持控制的一种干净方法是使用setter函数:

static void TestArray(Args _args)
{
    str 30 name[];
    int n = 0;
    int i;
    void nameSet(int _i, str 30 _name)
    {
        n = max(n,_i);
        name[_i] = _name;
    }
    ;
    nameSet(2,'abc');
    nameSet(4,'def');
    for (i = 1; i <= n; i++)
        info(name[i]);
}

没有上限索引限制,因此访问name[7]完全有效,在这种情况下返回空值。如果您始终使用所有孔并且从不存储空白,则可以使用此优势:

static void TestArray(Args _args)
{
    str 30 name[];
    int i;
    name[1] = 'abc';
    name[2] = 'def';
    for (i = 1; name[i]; i++)
        info(name[i]);
}

请注意,访问更高的索引(在这种情况下高于2)实际上可能会增加数组的分配大小。