无法转换#System; Object.Object [,]'类型的对象输入' System.Object []'

时间:2016-02-12 11:29:39

标签: c# .net object

我有一个dll,它给我输出一个Object [,]

 {Name = "Object[,]" FullName = "System.Object[,]"}

我正在尝试将其转换为Object []以便能够正确读取它,因为它是一个双列对象。 我试图把它Object[] values = (Object[])data;,但是我从tittle中获得了错误:

   Unable to cast object of type 'System.Object[,]' to type 'System.Object[]'.

有没有简单的方法来执行此操作?我想用它来制作一本字典。

提前致谢

3 个答案:

答案 0 :(得分:6)

不要将其用作Object[](它不是'),而是使用System.Array API:

var dictionary = new Dictionary<string, string>(); // For example
Array array = (Array) data;
for (int i = 0; i < array.GetLength(0); i++)
{
    string key = (string) array.GetValue(i, 0);
    string value = (string) array.GetValue(i, 1);
    dictionary[key] = value;
}

答案 1 :(得分:2)

如果实现两种类型,则只能将任何类型的实例转换为另一种类型的实例。但是object[,]并非来自object[],因此您无法将其转换为该类型。至少你应该提供你想要进一步处理的数组的哪个维度(/列)。

然而,为什么你需要它是不明智的。如果您只对列而不是行感兴趣,那么您可以简单地在数组的第一维上的循环内调用myArr[i, 0]或您感兴趣的任何列。

如果要迭代多维数组,可以将其展平:

foreach(var on in myArray) 
    Console.WriteLine(o);

只需循环所有元素而不考虑其在数组中的位置或

for(int i = 0; i < myArray.GetLength(myColumnIndex); i++) 
    Console.WriteLine(myArray[i, myColumnIndex]);

因此,您只能获得给定列中的元素

答案 2 :(得分:0)

当然,您无法将多维数组转换为单维数组。这是非法的。查看Casting

但是,作为您的问题的解决方案可能是以下逻辑

object[,] multiDimensionalArray = new object[,]
    {
        {1,2}, //first pair
        {3,4}, //second pair
        {5,6}  //third pair
    };

    Dictionary<object, object> dict = new Dictionary<object, object>();
                //total number of elements     //number of dimensions
    int pairs = multiDimensionalArray.Length / multiDimensionalArray.Rank; 

               //or you can use i < multiDimensionalArray.GetLength(0);
    for(int i = 0; i < pairs; i++)
    {
        dict.Add(multiDimensionalArray[i, 0], multiDimensionalArray[i, 1]);
    }