7

ArrayVFP9 言語の COM/DLL を .NET C# プロジェクトに返そうとすると、System.Object[*]配列を受け取り、キャストできませんSystem.Object[](アスタリスクなし)。

4

3 に答える 3

9

Timwi のソリューションは正常に機能するはずです。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);
于 2010-09-16T22:33:57.363 に答える
6

残念ながら、直接キャストすることはできません。ただし、型の新しい配列を作成し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);
于 2010-09-16T22:29:51.553 に答える