c# - 如何遍历动态类型数组

标签 c# arrays type-conversion

<分区>

我有一个 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”工具查看数组,但我似乎无法遍历它

最佳答案

尝试使用 dynamic 而不是 var

var lines = myApp.GetScreenLines();
foreach(dynamic  line in lines)
{
  //Do something
}

关于c# - 如何遍历动态类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24311100/

相关文章:

ruby - 谁能向我解释这个数组声明?

javascript - javascript中查找数组中重复元素的方法有哪些

c++ - 无法正确将十六进制转换为十进制

c# - 如何求两个数相除的小数余数?

c# - ToString() 的显式调用与隐式调用

javascript - Jquery UI 数据表 : Add row to a table with textbox as column

php - 从多维数组php生成分组的逗号分隔列表

c++ - 将 struct 转换为 unsigned char *

C++ long long 到字符串转换失败

c# - 如何循环从同一个数组中删除一个值的所有实例?