我有不编译的代码:

public struct MyStruct
{
    private fixed uint myUints[32];
    public uint[] MyUints
    {
        get
        {
            return this.myUints;
        }
        set
        {
            this.myUints = value;
        }
    }
}

现在,我知道为什么代码无法编译,但显然我正处于累得无法思考的地步,需要一些帮助来使我朝正确的方向发展。我已经有一段时间没有使用不安全的代码了,但是我很确定我需要做一个Array.Copy(或Buffer.BlockCopy吗?)并返回该数组的副本,但是这些不接受我需要的参数。我忘了什么?

谢谢。

最佳答案

使用fixed缓冲区时,您必须在fixed上下文中工作:

public unsafe struct MyStruct {
    private fixed uint myUints[32];
    public uint[] MyUints {
        get {
            uint[] array = new uint[32];
            fixed (uint* p = myUints) {
                for (int i = 0; i < 32; i++) {
                    array[i] = p[i];
                }
            }
            return array;
        }
        set {
            fixed (uint* p = myUints) {
                for (int i = 0; i < 32; i++) {
                    p[i] = value[i];
                }
            }
        }
    }
}

10-05 22:12