Как привести System.Object [*] к System.Object [] - PullRequest
7 голосов
/ 17 сентября 2010

Когда я попытался вернуть Array на языке VFP9 COM / DLL в мой проект .NET C #, я получил массив System.Object[*] и не могу привести к System.Object[] (без звездочки).

Ответы [ 3 ]

9 голосов
/ 17 сентября 2010

Решение Тимви должно работать нормально.Вы можете сделать что-то немного проще, используя Linq:

object[] newArray = sourceArray.Cast<object>().ToArray();

В случае, если вам нужно воссоздать System.Object[*] для передачи его обратно в VFP, вы можете использовать эту перегрузку из Array.CreateInstance метод:

public static Array CreateInstance(
    Type elementType,
    int[] lengths,
    int[] lowerBounds
)

Вы можете использовать его следующим образом:

object[] normalArray = ...

// create array with lower bound of 1
Array arrayStartingAt1 =
    Array.CreateInstance(
        typeof(object),
        new[] { normalArray.Length },
        new[] { 1 });

Array.Copy(normalArray, 0, arrayStartingAt1, 1, normalArray.Length);
6 голосов
/ 17 сентября 2010

К сожалению, вы не можете разыграть его напрямую. Однако вы можете создать новый массив типа object[] и скопировать данные. Что-то вроде ...

Array sourceArray = ...;

if (sourceArray.Rank != 1)
    throw new InvalidOperationException("Expected a single-rank array.");

object[] newArray = new object[sourceArray.Length];
Array.Copy(sourceArray, sourceArray.GetLowerBound(0),
           newArray, 0, sourceArray.Length);
4 голосов
/ 19 декабря 2016

У меня была похожая проблема.Получил массив как dynamic объект из сборки взаимодействия, также начиная с индекса один.Когда я попытался преобразовать это в Array объект, я получил то же сообщение об ошибке.
Выполнение, как предлагают другие ответы, не сработало.По странной причине, даже чтение свойства Length вызвало исключение.
Я нашел этот ответ, и он сработал.
Очевидно, что если вы используете C # 4.0, вам нужно привестиСначала dynamic в object, затем вы можете преобразовать его в Array.В предыдущих версиях .NET вы могли выполнять непосредственное приведение.
Вот Объяснение почему.

...