我有一个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[]'.
有没有简单的方法来执行此操作?我想用它来制作一本字典。
提前致谢
答案 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]);
}