【问题标题】:Check objects type检查对象类型
【发布时间】:2016-07-26 19:13:02
【问题描述】:

我正在使用 C# 应用程序做一些工作并通过服务在 AX 中发回结果。

我在 AX 中创建了一些类并在 C# 中使用它们的实例,然后我在经典数组的帮助下将对象发回。

在 AX 中,我在 System.Collections.ArrayList 中收到了这些东西,我的问题来了:

如何遍历这个集合并检查对象类型?

for (...)
{
   if (arr[i] is SalesLineCSharp) 
   {
   } 
   else if (arr[i] is SalesTableCSharp)
   {
   }
   //etc....
}

类似isas 的东西?

我刚刚做了一个例子并尝试了这个..

info(strFmt("%1", classId2Name(classIdGet(arr.get_Item(i)))));

确实,对于自定义类型,我得到了类的名称,而对于字符串和整数,我得到了 CLRObject,但这看起来很糟糕。

有没有更简洁的方法来完成这个?

【问题讨论】:

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


    【解决方案1】:

    从 AX 2012 开始,X++ 中实际上存在强制转换运算符 - 请参阅 MSDN 上的 here

    所以你应该能够做类似的事情

    Object tmpItem;
    ...
    tmpItem = arr.get_Item(i);
    if (tmpItem is SalesLineCSharp)
    {
        ...
    

    【讨论】:

    • 我在发布问题之前尝试过,但出现以下错误:get_Item 类型必须指定兼容的类、接口或表。我真的不知道如何处理这个消息。
    • 如果您将 get_Item 的返回值分配给“Object”类型的中间变量并使用此 var 检查类型,会发生什么情况。也许是汽车。 .NET 和 X++ 类型之间的编组无法直接处理
    • 有时我们只需要帮助编译器:)
    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2016-01-20
    • 2020-04-27
    相关资源
    最近更新 更多