如何遍历动态类型数组

本文关键字:动态 类型 数组 遍历 何遍历 | 更新日期: 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
}