InvalidCastException对象[*]到Object []

Gug*_*uge 2 c# com integration casting visual-foxpro

我有一个用Visual Fox Pro 9.0编写的COM对象.它有以下程序:

    PROCEDURE GetArray(m.vcArrayName as String) as array
RETURN @&vcArrayName
Run Code Online (Sandbox Code Playgroud)

使用C#在VS2010项目中引用COM对象.C#中程序的签名是:

object GetArray(string vcArrayName);
Run Code Online (Sandbox Code Playgroud)

调试时,我可以看到返回的值是{object [1..1]},而类型是object {object []}.扩展变量,我可以看到它是一个基数1的数组,其中一个元素是一个空字符串("");

但是,我无法将此值转换为object [].我总是得到一个带有挪威语消息的InvalidCastException,说我无法将Object [*]强制转换为Object [].

奇怪的是,如果COM对象返回一个二维数组,我将它转换为对象[,]是没有问题的.我发现很奇怪两个维度比一个维度更容易处理!

我想回答的问题是:

什么是这个对象[*]业务?任何人都可以告诉我它是否是挪威异常消息中的错误翻译,或者对象[*]是否是某种我从未听说过的模糊C#语法?

Han*_*ant 5

您将获得一个维度为1而不是向量的多维数组.C#语言不允许您声明这样的数组.您可以使用Array类引用返回值,该类允许使用与此类似的代码进行转换:

public static object[] ConvertFoxArray(Array arr) {
  if (arr.Rank != 1) throw new ArgumentException();
  object[] retval = new object[arr.GetLength(0)];
  for (int ix = arr.GetLowerBound(0); ix <= arr.GetUpperBound(0); ++ix)
    retval[ix - arr.GetLowerBound(0)] = arr.GetValue(ix);
  return retval;
}
Run Code Online (Sandbox Code Playgroud)