我有一个multidimentional列指针指向整数(未知的级别)被传递到我的功能作这样的:

    public unsafe static void MyMethod(Array source, ...)
    {
         //...
    }

多层面阵列的指针,都正在建造之外的方法,并正在通过。这里有一个例子:

int*[,,,] testArray = new int*[10,10,5,5];

MyMethod(testArray);

我怎么可以设定一个数值在运行时计算的指标阵列中的?阵列。设定值(...)工作的完美的非指阵列,但拒绝工作为我int*阵列。使用反射镜,我看到的设定值减少了向下调InternalSetValue这需要对象的价值,但它的标记为外部而且我不能看见的执行情况。我参加了一个在黑暗中拍摄,并试图通过在装箱的指针,但未成功。

有帮助吗?

解决方案

此工作的:

unsafe static void MyMethod(int** array)
{
    array[10] = (int*)0xdeadbeef;
}

private static unsafe void Main()
{
    int*[, , ,] array = new int*[10, 10, 10, 10];

    fixed (int** ptr = array)
    {
        MyMethod(ptr);
    }

    int* x = array[0, 0, 1, 0]; // == 0xdeadbeef
}

这是否帮助?


问题专家:这是错误的假设数组在内存中连续分配

其他提示

这不起作用,因为这是不可能的盒的指针。净的,所以你可以永远不会叫的 Array.SetValue 并通过一个 int*.

你可以宣布 MyMethod 接受 int*[,,,] 而不是?

编辑: 进一步阅读, 一个有趣的最近的后从埃里克利珀特.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top