在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现在将是一个浮点数组。一个二维浮点数组。