如何遍历Dynamic类型数组

时间:2014-06-19 15:59:24

标签: c# arrays type-conversion

我有一个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;来查看数组。视觉工作室中的工具,但我似乎无法迭代它

1 个答案:

答案 0 :(得分:0)

尝试使用dynamic而不是var

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