В .NET существует два разных вида массивов: одномерный «вектор» и многомерные массивы.Вы получили последний, многомерный массив с рангом 1. Это произойдет, если неуправляемый код вернул SAFEARRAY, нижняя граница которого не равна 0.
Вы можете прочитать содержимое массива с помощьюArray.GetValue ().Или преобразуйте его следующим образом:
private static object[] ConvertArray(Array arr) {
int lb = arr.GetLowerBound(0);
var ret = new object[arr.GetUpperBound(0) - lb + 1];
for (int ix = 0; ix < ret.Length; ++ix) {
ret[ix] = arr.GetValue(ix + lb);
}
return ret;
}
Тест:
var native = Array.CreateInstance(typeof(object), new int[] { 42 }, new int[] { 1 });
var dotnet = ConvertArray(native);
ПРИМЕЧАНИЕ. У вас могут быть проблемы в .NET 4.0 и более поздних версиях при использовании некоторых библиотек типов COMОфис в частности.Свойство или метод могут возвращать вариант, который содержит массив.Заканчивается как динамический в вашей программе на C #.В этом случае компилятор C # не генерирует правильный код связующего.Чтобы обойти это, приведите сначала к (объекту), а затем к (массиву).