在C#中键入强制转换对象数组成员会导致异常

在C#中键入强制转换对象数组成员会导致异常,c#,arrays,object,C#,Arrays,Object,我有下面的代码,我正试图调试 int ll(ref float[,] _lv) { object[] results = new object[20]; results = func_v1(11, _lv); } 查看变量“结果”显示如下内容 results {object[11]} + [0] {float[1,1]} + [1] {double[1,1]} + [2] {float[48,1]} ... ... + [10] {float[1,1]} 我无

我有下面的代码,我正试图调试

int ll(ref float[,] _lv) {
  object[] results = new object[20];

  results = func_v1(11, _lv);

}
查看变量“结果”显示如下内容

results {object[11]}
 + [0] {float[1,1]}
 + [1] {double[1,1]}
 + [2] {float[48,1]}
   ...
   ...
 + [10] {float[1,1]}
我无法键入cast从中获取值

float f=(float)结果[0]引发无效的强制转换异常

请帮助我理解这个对象数组到底是什么,以及如何从中获取值

问候。 ak

float f=(float)结果[0]引发无效的强制转换异常

我想你需要

float[,] f = (float[,])results[0];
double[,] d = (double[,])results[1];

索引0处的项不是一个
浮点
-它是一个
浮点[,]

您使用的是一个多维数组,您可以在此处阅读:

你需要适当地施法

var f = (float[,])results[0]

显然,object[]结果中没有浮动。你需要进入func_v1,看看它返回了什么。很明显,它返回的东西被降级到对象的,可能是任何东西。从粘贴的输出来看,它似乎返回了一个混合了二维浮点和双精度的对象数组

您可以尝试强制转换(float[,])结果[0],但显然,当您对实际上是双[,]的项目执行此操作时,结果会爆炸。如果无法更改func_v1(),则需要在项目类型上设置开关


i、 e:if(results[0].GetType()==typeof(float[,]))

为什么要投否决票?这个问题在我看来是合理的。向上投票…但请记住,var f现在将是一个浮点数组。一个二维浮点数组。