2

在我的 C# 代码中,我构造了四个数据数组:

double[] values;
DateTime[] timestamps;
long[] qualities;
long[] reasons;

这些数组需要传递给外部 API。API 方法调用有些间接;它的签名看起来像invokeApiMethod(string apiMethodName, Object[] apiMethodParams)

在这种情况下,外部 API 方法调用需要四个我已经构造的数组。

如果我使用以下代码构造 Object[]:

Object[] apiMethodParams = { values, timestamps, qualities, reasons };

这会导致所有四个现有数组都被复制到一个大的连续新内存块中吗?还是 C# 只是将现有数组的引用数组传递给外部 API?

4

3 回答 3

4

这会导致所有四个现有数组都被复制到一个大的连续新内存块中吗?还是 C# 只是将现有数组的引用数组传递给外部 API?

后者。它将是一个由四个元素组成的数组,其中每个元素都是一个引用。values等的值timestamps只是对数组的引用。

请注意,如果外部 API 修改了数组内容,并且您想要原始值,您可能想要获取部分或全部数组的副本 - 但这不会自动发生。

于 2012-05-10T05:51:01.277 回答
1

http://www.mbaldinger.com/post/C-reference-types-are-passed-by-value!.aspx

http://answers.yahoo.com/question/index?qid=20090105141923AAt63hD

如果您需要传递不同的数组,则需要克隆/复制它,然后传递克隆/复制的数组

于 2012-05-10T05:54:33.667 回答
0

它们是参考。复制和创建使用“new”关键字。

于 2012-05-10T06:21:25.150 回答