我有一个COM来读取我们的VMS系统并返回一个动态类型的数组。
在视觉工作室中,当我检查它显示的类型时:
dynamic {object[]}
所以我尝试了以下内容:
var lines = myApp.GetScreenLines();
foreach(var line in lines)
{
//Do something
}
但我一直得到例外:
无法投射'
System.Object[*]
'输入'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;对象类型的对象[*]'输入' System.Object []'。
我尝试的第二个是:
object[] newArray = myWinFormsApp.GetScreenLines().Cast<object>().ToArray();
我得到了例外:&#39; System.Array&#39;不包含&#39; Cast&#39;
的定义所以我不认为这个问题是重复的,因为我已经解释过我可以使用&#34; watch&#34;来查看数组。视觉工作室中的工具,但我似乎无法迭代它
答案 0 :(得分:0)
尝试使用dynamic而不是var
var lines = myApp.GetScreenLines();
foreach(dynamic line in lines)
{
//Do something
}