【问题标题】:Trouble referencing an array marshaled as unmanaged with a constant size无法引用以恒定大小封送为非托管的数组
【发布时间】:2012-08-23 19:16:25
【问题描述】:

当我创建一个具有恒定大小的数组时,我试图了解幕后发生的事情,如下所示:

[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,但进展不大。

我似乎只是找到了一个可以提供良好概念理解的资源。因此,任何资源以及答案都将不胜感激。

谢谢你, 布莱克

【问题讨论】:

    标签: c# arrays ref


    【解决方案1】:

    首先 - float 不能为空(如果您想要可空的浮点数,请使用 float?),所以您的问题可能出在未初始化的数组中?

    总体MarshalAs

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

    这就是你想要的吗?或者你的目标是否像下面这样简单

    float [] constArray = new float[10];
    

    您确定需要简单的数组吗?为什么不使用List&lt;float&gt;

    【讨论】:

    • 5 年后,我完全忘记了为什么要使用数组。我所记得的是试图模仿一种 c 风格的方式来设置数组的内存,这样我就可以在指针的位置转储值。我认为我的目标就像float [] constArray = new float[10]; 一样简单。为了便于理解,为什么对 constArray 的第 i 个索引的引用没有解析?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2011-11-10
    • 2011-08-05
    • 2021-03-14
    相关资源
    最近更新 更多