无法引用一个数组,该数组被调整为具有常量大小的非托管数据

时间:2012-08-29 08:15:39

标签: c# arrays ref

当我创建一个具有恒定大小的数组时,我试图了解窗帘后面发生了什么:

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public float[] constArray;

我知道我可以使用fixed关键字,但是ref不再是选项,所有指针操作都必须在固定表达式中。

我要做的是解析XML文件并存储在数组中的给定索引处。因此,如果文件中有10个元素,我可能会设置以下内容:

for (int i = 0; i < 10; i++)
{
    readElement("element", ref constArray[i]);
}

但是,constArray[i]null

可能需要进一步的实例化,但那么编组的重点是什么。我认为编组创建了ref操作的对象来创建引用。

我通过reference typesvalue types阅读并找不到更多信息。我还阅读了其他一些内容,例如refreferencing arrays,并取得了很大进展。

我似乎可以找到提供良好概念理解的资源。因此,非常感谢任何资源和答案。

谢谢你, 布雷克

1 个答案:

答案 0 :(得分:1)

首先 - float不能为空(如果你想要可空浮点数然后使用float?),那么你的问题可能是未初始化的数组?

重叠MarshalAs

  

指示如何在托管代码和非托管代码之间编组数据。

这就是你想要的吗?或者你的目标就像跟随

一样简单
float [] constArray = new float[10];

您确定需要简单数组吗?为什么不使用List<float>