【问题标题】:Type casting object array members in C# causes an exceptionC# 中的类型转换对象数组成员会导致异常
【发布时间】:2012-09-24 16:55:42
【问题描述】:

我正在尝试调试以下代码

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)results[0]; 抛出一个无效的强制转换异常。

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

问候。 啊

【问题讨论】:

  • 为什么投反对票?问题对我来说看起来很合理。赞成。

标签: c# arrays object


【解决方案1】:

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

您可以尝试强制转换 (float[,])results[0],但很明显,当您对实际上是 double[,] 的项目执行此操作时,它会崩溃。如果您无法更改 func_v1() ,则需要对项目的类型进行开关。

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

【讨论】:

    【解决方案2】:

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

    你需要适当地转换它

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

    【讨论】:

    • ...但请记住,var f 现在将是一个浮点数组。
    • 浮点数的二维数组。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      我觉得你需要

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        • 2021-06-26
        • 2020-02-11
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多