如何在 Dynamics AX 2012 中从 X++ 代码迭代枚举元素
已出版: 2025年2月15日 UTC 23:11:04
最后更新 2026年1月12日 UTC 08:42:08
本文解释了如何在 Dynamics AX 2012 中枚举和遍历基本枚举的元素,并提供了一个 X++ 代码示例。
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
本文中的信息基于 Dynamics AX 2012 R3 版本,可能不适用于其他版本。
我最近在创建一个表单,需要显示枚举中每个元素的值。与其手动创建字段(这样如果枚举被修改,就需要维护表单),我决定采用动态方式实现,以便在运行时自动将字段添加到表单设计中。
然而,我很快发现,虽然一旦掌握了方法,遍历枚举中的值就很容易,但这其实有点令人困惑。
显然,你需要从 DictEnum 类入手。你会发现,这个类提供了多种方法,可以根据索引和值获取名称、标签等信息。
索引和值之间的区别在于,索引是枚举中元素的编号(假设枚举元素从零开始按顺序编号),而值是元素的实际“值”属性。由于大多数枚举的值都是从 0 开始按顺序编号的,因此元素的索引和值通常会相同,但并非总是如此。
但是,如何知道枚举包含哪些值呢?这就容易让人困惑了。DictEnum 类有一个名为 values() 的方法。你可能以为这个方法会返回枚举值的列表,但这显然太简单了,所以它实际上返回的是枚举值的数量。然而,这个数量与枚举值本身无关,因此你需要使用这个数量作为调用基于索引的方法的基础,而不是基于值的方法。
如果他们当初把这个方法命名为 indexes() 就好了,那样就不会那么容易混淆了 ;-)
还要记住,枚举值(以及这些“索引”)从 0 开始,这与 X++ 中的数组和容器索引(从 1 开始)不同,因此要遍历枚举中的元素,您可以这样做:
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
这将把枚举中每个元素的符号和标签输出到信息日志中。
进一步阅读
如果您喜欢这篇文章,您可能还会喜欢这些建议:
- Dynamics AX 2012 SysOperation Framework 快速概览
- 在 Dynamics AX 2012 中的 SysOperation 数据契约类中使用查询
- 在 Dynamics AX 2012 中将实数转换为带小数的字符串
