Я застрял в кажущейся тривиальной задаче и нуждаюсь в вашей помощи.
Мне нужно написать метод со следующей сигнатурой:
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**[]
или что-то еще, и метод должен иметь возможность обрабатывать все случаи.