Я застрял в кажущейся тривиальной задаче и нуждаюсь в вашей помощи.
Мне нужно написать метод со следующей сигнатурой:
System.Array ToIntPtrArray(System.Array a)
где фактический аргумент может быть массивом любого типа указателя (например, 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;
}
Но проблема в том, что это может быть не void*[], а void**[] или что-то еще, и метод должен иметь возможность обрабатывать все случаи.