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

时间:2012-10-03 17:46:22

标签: 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]}

我无法输入强制转换来从中获取值

float f = (float)results[0];会抛出无效的强制转换异常。

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

问候。 AK

4 个答案:

答案 0 :(得分:5)

您正在使用多维数组,您可以在此处阅读: http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=vs.71).aspx

你需要适当地施展它

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

答案 1 :(得分:1)

  

float f = (float)results[0];会抛出无效的强制转换异常。

我认为你需要

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

答案 2 :(得分:1)

索引0处的项目不是float - 它是float[,]

答案 3 :(得分:0)

显然,对象[]结果中没有浮点数。您需要进入func_v1并查看它返回的内容。显然它返回的东西正在被反击到对象,这可能是任何东西。从您粘贴的输出看起来它返回一个具有二维浮点数和双精度混合的对象数组。

你可以尝试施放(浮动[,])结果[0],但显然当你对一个实际上是双[,]的项目进行渲染时会爆炸。如果你不能改变func_v1(),你需要切换项目的类型。

即:if(results [0] .GetType()== typeof(float [,]))