<分区>
我有一个 COM 读取我们的 VMS 系统并返回一个动态类型的数组。
在 visual studio 中,当我检查它显示的类型时:
dynamic {object[]}
所以我尝试了以下方法:
var lines = myApp.GetScreenLines();
foreach(var line in lines)
{
//Do something
}
但我不断收到异常:
Unable to cast object of type '
System.Object[*]
' to type 'System.Object[]
'.
但是,如果我检查 lines
,它会像普通数组一样显示,我什至可以展开它来查看数据。
有谁知道如何将这种动态数组数据类型转换为字符串类型?
我已经尝试了重复链接中的解决方案,但它们似乎不起作用,因为它们假设我知道有关数组的信息。但由于它是动态的,直到运行时我才知道任何事情,所以我无法获得数组的下限或上限。
PS 我无法控制 myApp.GetScreenLines()
;作为其 COM API 返回。
编辑:
副本中提供的解决方案无法解决我的问题。我都试过了。
我尝试的第一个是:
Array sourceArray = myWinFormsApp.GetScreenLines();
if (sourceArray.Rank != 1)
throw new InvalidOperationException("Expected a single-rank array.");
object[] newArray2 = new object[sourceArray.Length];
Array.Copy(sourceArray, sourceArray.GetLowerBound(0),
newArray2, 0, sourceArray.Length);
这会导致异常:无法将类型为“System.Object[*]”的对象转换为类型“System.Object[]”。
我尝试的第二个是:
object[] newArray = myWinFormsApp.GetScreenLines().Cast<object>().ToArray();
我得到异常:“System.Array”不包含“Cast”的定义
所以我不认为这个问题是重复的,因为我解释过我可以使用 visual studio 中的“watch”工具查看数组,但我似乎无法遍历它