Как распаковать массив System.Int32[*]

Firebird rdr.Read() возвращает для столбцов массива fb объект, который в моем случае является System.Int32[*] (массив целых чисел, отличный от нуля), как мне распаковать его во что-то разумное? Коннектор не имеет методов rdr.GetZeroBasedArray() или rdr.GetUsableArray().

Спасибо заранее...


person user592911    schedule 27.01.2011    source источник
comment
Массивы являются ссылочными типами и, следовательно, не упакованы.   -  person cdhowie    schedule 28.01.2011
comment
Код преобразования находится здесь: stackoverflow.com/questions/4807968/   -  person Hans Passant    schedule 28.01.2011


Ответы (1)


C# не поддерживает массивы в стиле [*] (одномерные с отсчетом от нуля). Попытка приведения к int[] вызовет исключение.

Единственный вариант, который у вас есть, — это привести к System.Array, а затем использовать эти методы для его изменения:

В качестве альтернативы, конечно, вы всегда можете использовать Array.GetLength, чтобы найти длину массива, создать экземпляр стандартного int[] той же длины, а затем использовать Array.Copy, чтобы скопировать данные. Затем вы можете использовать array[i] как обычно, но имейте в виду, что теперь вы работаете с отдельной копией.

P.S. Как уже было сказано, распаковать — неправильное слово. Упаковка/распаковка используется только с типами значений, но массивы всегда являются ссылочными типами (даже массивы типов значений являются ссылочными типами). То, что вы ищете, называется приведением. Переменная Array будет содержать ссылку на тот же объект, что и переменная object.

person Timwi    schedule 27.01.2011