什么是double[*][*]?

3

我目前正在尝试将.mat文件转换为XML。为此,我必须使用一个库,该库会返回一个动态对象。我知道.mat文件的结构,因此可以从中获取数据。我将这些数据存储在一个对象中。.mat文件中的一个值是MATLAB类型的<1701x256 double>。我以为它应该是double[][]。但是当我尝试分配这个值时,我得到了:

Unbehandelte Ausnahme: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Der 
double[*,*]-Typ kann nicht in double[][] konvertiert werden.
   bei CallSite.Target(Closure , CallSite , Object )
   bei System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site,T0 arg0)
   bei CameraParser.Program.Main(String[] args) in c:\myProject\Program.cs:Zeile 44.

double[*,*]是什么类型?我应该给赋值对象的属性设置哪个类型?

我尝试过

double[][] myAttribute;

并且

double[] myAttribute;

并且

double** myAttribute;

最近一次给了
Error   6   Pointers and fixed size buffers may only be used in an unsafe context

而:在C中,double[,]对应的是double**吗? - Martin Thoma
我使用 System.Xml.Serialization.XmlSerializer - 但我对C#还很陌生,如果有更合适的东西,我可以改变这个。 - Martin Thoma
1
@moose - 我认为 XmlSerializer 不直接支持多维数组序列化(如果我错了,请指正),但是你可以尝试使用 BinaryFormatter,除非你需要将序列化格式设置为 XML? - keyboardP
1
@moose - 这是一个二维数组,但同样可以是多维数组(double [,,] 将有3个维度)。从技术上讲,2D数组是一种多维数组,因为它具有多个维度,但我更经常看到它被称为2D数组。 - keyboardP
1
@moose - 我刚刚找到了这个BF的例子(http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/90c98754-2580-404a-81ae-aedba5f2604d/),但是也有这篇关于XML的帖子(https://dev59.com/mUbRa4cB1Zd3GeqP1pRg)。或许会有所帮助 :) - keyboardP
显示剩余5条评论
1个回答

3
类型名称中的*表示您获得了一个不符合规范的数组类型。这在COM服务器中很常见,它们倾向于使用1作为下限。您不能将这样的数组转换为C#数组类型,它仅支持下限为0的数组。但是您可以将其转换为Array
使用Array方法访问该数组。例如,Array.GetLowerBound()告诉您从哪里开始索引,GetUpperBound()告诉您何时停止。使用Array.GetValue()读取数组元素。由于这是一个二维数组而不是交错数组,因此您需要使用接受int[]的重载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接