【问题标题】:how to convert object array to double array in c#如何在c#中将对象数组转换为双数组
【发布时间】:2015-05-11 14:59:18
【问题描述】:

您好,最近我正在尝试使用 matlab 函数获取结果,matlab 函数可以返回像图像一样的双精度数组,但是然后我在 C# 中通过对象类得到了双精度,但我无法转换为双精度对象类 有人可以帮助我

我已经解决了这个问题

        MLApp.MLApp matlab = new MLApp.MLApp();
        matlab.Execute(@"Path");
        object result = null;
        matlab.Feval("RemoveShadow", 1, out result, 12, 13);
        var res = (result as object[]).Select(x => (double[,])x).ToArray();
        object im = res.GetValue(0);
        double[,] d = (double[,])im;

我已经解决了这个问题

【问题讨论】:

  • 尝试使用result.GetType() 来查看它的确切类型(在调试器中,如果您正在使用控制台程序,则使用Console.WriteLine(result.GetType())
  • 但我无法将对象类转换为双倍 什么不起作用?您收到错误消息了吗?
  • 我收到“程序.exe 中发生'System.IndexOutOfRangeException' 类型的未处理异常”
  • 如果你得到一个IndexOutOfRangeException 这意味着你正在尝试访问数组中不存在的索引。我注意到你打电话给res[1]。我们确定它有价值吗?数组具有从零开始的索引,这意味着第一个元素位于索引 0 而不是索引 1
  • 很高兴您解决了问题。但永远不要,用答案更新你的问题。要么将其中一个答案标记为答案,要么添加您自己的答案并标记它。谢谢。祝你好运。

标签: c# type-conversion


【解决方案1】:

如果对象数组中所有都是双倍的,则替代上述答案

double[] resultArray = Array.ConvertAll<object, double>
                                  (inputArray, x => (double)x);

【讨论】:

  • 我需要这个数组 double[,]
  • 谢谢我有结果了
【解决方案2】:

您可以尝试将object[] 转换为double[]

var res = (result as object[]).Select(x => (double)x).ToArray();

【讨论】:

  • 感谢您的回答,但对象类没有 Select 方法
【解决方案3】:

正确的处理方法是

var res = (result as object[]).Select(x => Convert.ToDouble(x)).ToArray();

【讨论】:

  • 我尝试了他的代码,但没有成功,我得到了 InvalidTypeCaste 异常,因为有时数组可能为空。所以上面给出的解决方案在处理 null 时有问题。就像我们使用我的解决方案一样,您可以控制 null 类型转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多