如何遍历动态类型数组
本文关键字:动态 类型 数组 遍历 何遍历 | 更新日期: 2023-09-27 18:09:36
我有一个COM,它读取我们的VMS系统并返回一个动态类型的数组。
在visual studio中,当我检查类型时,它显示:
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();
我得到了异常:'System. '数组'不包含'Cast'的定义
所以我不认为这个问题是重复的,正如我解释的那样,我可以在visual studio中使用"watch"工具查看数组,但我似乎无法遍历它
尝试使用dynamic代替var
var lines = myApp.GetScreenLines();
foreach(dynamic line in lines)
{
//Do something
}