Southmountain Ответов: 2

Динамический массив C соответствует какому типу C#?


У меня есть старый код C с некоторой базовой структурой данных: динамический массив.
Я хочу преобразовать его в код C#.

Какой тип в C# я должен сопоставить?

Что я уже пробовал:

tuitively ArrayList в C# - это ответ. попробуйте найти лучший ответ.

PIEBALDconsult

Это может быть, но ArrayList не очень хорош. Вместо этого попробуйте использовать общий список".

Sergey Alexandrovich Kryukov

Чтобы получить решение,пожалуйста, напишите образец сигнатуры функции C. "Динамический массив" звучит двусмысленно. Что это, собственно, такое?
—СА

2 Ответов

Рейтинг:
19

OriginalGriff

Уж точно не Арррейлист!
Проблема заключается в том, что массив динамического размера в C (который, как я предполагаю, вы используете, так как C не имеет определенного dynamic ключевое слово) не является "фиксированным" размером элемента, а ArrayList - это массив object которые фактически являются указателями и поэтому фиксируются на 32 или 64 битах в зависимости от ширины системного слова.
Код C может создать массив из 100 элементов, каждый char (100 байт), каждый int (200, 400 или 800 байт), указатели (400 или 800 байт) или даже структуру (100 * sizeof(myStruct) байт), так что сопоставление с ArrayList не будет работать.
Вам нужно сопоставить код C с массивом или списком<T & gt; соответствующего типа данных ширины в C#, чтобы он работал, если вы хотите вызвать код C изнутри C# - очень важно получить соответствие размера.
Если вы переписываете C в C#, то гораздо менее важно соответствовать размеру элемента, но ArrayList все равно является неправильным решением: он устарел и был уже давно-он был заменен List< T> в .NET V2. 0!


Southmountain

Большое спасибо!

OriginalGriff

Пожалуйста!

Рейтинг:
0

Sergey Alexandrovich Kryukov

Пожалуйста, смотрите открытый исходный код P / Invoke Interop Assistant:
Управляемый, родные, и COM-взаимодействия команда — скачать П/вызвать взаимодействия помощника.

—СА


Southmountain

Большое вам спасибо за ссылку. он содержит много информации.