2015-04-28 4 views
-1

Так что, если у меня есть такой код:Как я могу получить указатель на массив неизвестного типа?

public static void GetPointer(int[] array) 
{ 
    fixed(void* pointer = array) 
    { 

    } 
} 

я могу взять указатель неизвестного типа в целочисленном массиве очень легко. Но что, если я хочу взять указатель на массив неизвестного типа? Как мне это сделать?

public static void GetPointer(Array array) 
{ 
    fixed(void* pointer = array) 
    { 

    } 
} 

Не работает.

+3

Можем ли мы выяснить, почему вам нужно использовать указатели? За 12 лет работы в .NET я думаю, что мне пришлось использовать их только один раз с неуправляемым кодом. Это поможет узнать, что вам нужно делать с указателем, если мы знаем, как вам нужно его использовать. –

+1

Я пишу обертку к неуправляемой DLL. Лучший способ сделать это - использовать неуправляемый код. Я не совсем новичок, поэтому я знаю, что это лучший способ. – Eugen1344

+0

Итак, массив, передаваемый из библиотеки DLL? И DLL проходит в void * для массива? –

ответ

1

Ваше намерение указателя для меня чуждо, однако вы можете использовать Generics. Они позволят вам использовать разные типы.

public static void GetPointer<T>(T[] array) 
{ 
    // Do Stuff... 
} 

Вы должны указать тип в <T>, который позволит этому типу, чтобы теперь назначен T, который вы будете использовать в вашем методе. Не уверен, почему вам нужны указатели, красота .Net - это облегчение необходимости в них.

Особенно, поскольку указатель будет считаться неуправляемым кодом в .Net. Что вы обычно не используете.

+0

Это не работает, и это не лучший способ сделать это, потому что пользователь может указать что-то, что НЕ является массивом – Eugen1344

+0

@ Eugen1344 Ответ действительно работает, возможно, если бы вы предоставили больше информации, вы бы получили лучший ответ. – Greg

+0

@Greg я описал это в декларации класса. И ваш авайер по-прежнему неверен, извините – Eugen1344