什么是我用COM互操作得到的`Object [*]`类型?

Ale*_* C. 10 c# com-interop

我做C#excel互操作.我从C#调用宏,我期待对象的数组.我能够从返回二维数组的宏中获取二维对象数组.

但是,其他(第三方)宏应该返回一维数组.我无法得到(object[])xlApp.Run(...)工作(它抛出一个异常),调试器中的类型信息表示结果是类型Object[*].来自异常的实际消息是

Unable to cast object of type 'System.Object[*]' to type 'System.Object[]'.
Run Code Online (Sandbox Code Playgroud)

这是什么Object[*]类型,如何从中检索一维数组?

编辑:我想到这可能意味着SAFEARRAY的VARIANTS.但随后出现了两个问题:为什么二维数组一切正常?如何将SAFEARRAY转换为C#数组?

LaG*_*ere 9

我弄乱了关于你的问题的各种文章:

OPCFondation:基本上不是将其声明为对象数组,而是可以将其声明为数组而不提供任何元素类型.所以不要在Object []中使用数组,而是使用foreach循环来使用子数组.

foreach(object subobject in (Array)myarrayitem)
{
   //do stuff with the subobject, even browse further
}
Run Code Online (Sandbox Code Playgroud)

此解决方案似乎有效,因为您可以在此处再次找到它.

在StackOverflow上:他们谈论下限> 0的数组,它给你Object [*]类型,有一些链接可以对主题感兴趣,但我认为第一个想法是好的.