gpt4 book ai didi

c# - InvalidCastException 对象 [*] 到对象 []

转载 作者:行者123 更新时间:2023-11-30 19:33:56 27 4
gpt4 key购买 nike

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

    PROCEDURE GetArray(m.vcArrayName as String) as array
RETURN @&vcArrayName

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

object GetArray(string vcArrayName);

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

但是,我无法将此值转换为 object[]。我总是收到一个 InvalidCastException 和一条挪威消息,说我不能将 Object[*] 转换为 Object[]。

奇怪的是,如果 COM 对象返回一个二维数组,我可以毫无问题地将其转换为对象 [,]。我觉得很奇怪,二维比一个更容易处理!

我想回答的问题是:

这个 Object[*] 业务是什么?谁能告诉我它是否是挪威语异常消息中的错误翻译,或者 Object[*] 是否是某种我从未听说过的晦涩的 C# 语法?

最佳答案

您将获得一个维度为 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;
}

关于c# - InvalidCastException 对象 [*] 到对象 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2666645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com