When I Tried to return an Array
in VFP9 language COM/DLL to my .NET C# project
I receive a System.Object[*]
array and I can not cast to System.Object[]
(Without asterisk).
问问题
3052 次
3 回答
9
Timwi 的解决方案应该可以正常工作。你可以使用 Linq 做一些更简单的事情:
object[] newArray = sourceArray.Cast<object>().ToArray();
如果您需要重新创建 aSystem.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 回答