如何在不复制的情况下将1-D阵列调整为C#中的2-D阵列?

Cra*_*g W 8 .net c# arrays

据我所知,二维数组在内存中的布局与一维数组完全相同,只是使用不同的索引.所以考虑到这一点,似乎在C#中必须有某种方式(可能是不安全的)将1-D数组转换为2-D数组而不实际复制元素,假设您希望将1-D数组中的元素转换为第一行中的二维数组.我确实弄清楚如何使用单个复制命令完成此操作,但它似乎仍然需要更多处理:

int[] onedim = new int[] { 5, 3, 6, 2, 1, 5 };
int[,] twodim = new int[2, 3];
GCHandle pinnedArray = GCHandle.Alloc(twodim, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
Marshal.Copy(onedim, 0, pointer, onedim.Length);
pinnedArray.Free();
Run Code Online (Sandbox Code Playgroud)

有什么方法可以告诉C#,将这个1-D阵列视为具有这些尺寸的2-D阵列?不安全的代码很好.如果没有,这是语言的限制还是我缺少一些基本问题?

Dmi*_*try 0

您可以尝试使用Buffer.BlockCopy以下方法:

Buffer.BlockCopy(onedim, 0, twodim, 0, onedim.Length * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

它也接受多维数组。