Axapta 检查对象类型

Axapta 检查对象类型,axapta,microsoft-dynamics,dynamics-ax-2012,x++,dynamics-ax-2012-r3,Axapta,Microsoft Dynamics,Dynamics Ax 2012,X++,Dynamics Ax 2012 R3,我正在使用一个C#应用程序来做一些工作,并通过服务将结果发送回AX 我在AX中创建了几个类,并在C#中使用它们的实例,然后在经典数组的帮助下将对象发送回 在AX中,我在System.Collections.ArrayList中接收内容,下面是我的问题: 如何迭代此集合并检查对象类型 for (...) { if (arr[i] is SalesLineCSharp) { } else if (arr[i] is SalesTableCSharp) { }

我正在使用一个C#应用程序来做一些工作,并通过服务将结果发送回AX

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

在AX中,我在
System.Collections.ArrayList
中接收内容,下面是我的问题:

如何迭代此集合并检查对象类型

for (...)
{
   if (arr[i] is SalesLineCSharp) 
   {
   } 
   else if (arr[i] is SalesTableCSharp)
   {
   }
   //etc....
}
类似于
的东西是
还是
作为

我刚刚举了个例子,试过这个

info(strFmt("%1", classId2Name(classIdGet(arr.get_Item(i)))));
事实上,对于自定义类型,我得到了类的名称,对于字符串和int,我得到了CLRObject,但这看起来太糟糕了


有没有更干净的方法来实现这一点?

从AX 2012开始,X++中实际上有强制转换操作符-请参见MSDN上的

所以你应该可以做一些类似的事情

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

在发布问题之前,我尝试过这样做,但得到了以下错误:类型get_项必须指定兼容的类、接口或表。我真的不知道如何处理这个消息。如果将get_Item的返回值赋给“Object”类型的中间变量,并使用这个变量检查类型,会发生什么情况。也许是汽车。NET和X++类型之间的封送无法直接处理,有时我们只需要帮助编译器:)