【发布时间】:2017-10-27 18:07:45
【问题描述】:
据我所知,二维数组在内存中的布局与一维数组完全相同,只是使用不同的索引。因此,假设您希望将一维数组中的元素转换为二维数组以行优先的方式。我确实想出了如何使用单个复制命令来完成此操作,但它似乎仍然需要更多的处理:
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();
有什么方法可以告诉 C#,将这个一维数组视为具有这些维度的二维数组吗?不安全的代码很好。如果不是,这是语言的限制还是我遗漏了一些基本问题?
【问题讨论】:
-
数组转换为二维数组后如何使用?
-
@AaronRoberts 不确定你的意思。它的行为应该与您声明二维数组内联时完全相同,例如
int[,] twodim = new int[,] { { 5, 3, 6 }, { 2, 1, 5 } }. -
您是在创建初始 int[] 还是其他人?
-
@Moop 别人。它是从 C DLL 传递给我的。
-
你能显示提供数组的外部方法的签名吗?