从 C# 中的现有数组构造数组 - 这会在内存中创建副本吗?

本文关键字:数组 内存 副本 创建 | 更新日期: 2023-09-27 18:33:54

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

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

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

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

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

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

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

从 C# 中的现有数组构造数组 - 这会在内存中创建副本吗?

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

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

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

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

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

如果您需要传递不同的数组,

则需要克隆/复制它,然后传递克隆/复制的数组

它们是引用。复制和创建使用"new"关键字。