我陷入了一项看似微不足道的任务,需要你的帮助.
我需要编写一个带有以下签名的方法:
System.Array ToIntPtrArray(System.Array a)
Run Code Online (Sandbox Code Playgroud)
其中一个实际的参数可以是任意的阵列指针类型(例如int*[],long**[],void*[,]),并用类型的元素返回相同形状的阵列System.IntPtr具有相同的数值作为输入数组的元素.问题是如果我事先不知道它们的类型,我不明白如何提取指针的数值.
例如,如果我事先知道我的参数总是类型void*[],我可以编写如下方法:
unsafe IntPtr[] ToIntPtrArray(void*[] a)
{
var result = new IntPtr[a.Length];
for (int i = 0; i < a.Length; i++)
result[i] = (IntPtr) a[i];
return result;
}
Run Code Online (Sandbox Code Playgroud)
但问题是它可能不是void*[],但是void**[]或其他任何东西,该方法应该能够处理所有情况.