Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不复制和/或分配的情况下创建子阵列_C#_Arrays - Fatal编程技术网

C# 在不复制和/或分配的情况下创建子阵列

C# 在不复制和/或分配的情况下创建子阵列,c#,arrays,C#,Arrays,我是C#的新手,想知道如何做到以下几点: 我创建了一个数组,其大小为我需要存储的最大元素数: int[] myArray = new int[64000]; 我正在将此阵列传递给第三方API。在这个API中,他们使用.Length属性来确定元素的数量。我不希望发生这种情况,因为数组长度是最大计数,而不是“活动计数”(即使用的元素数) 考虑到这一点,是否有办法创建另一个数组,其大小等于活动计数?而且,这可以在没有副本和/或分配的情况下完成吗?我已经有了分配的内存——我所要做的就是在很好地使用第三

我是C#的新手,想知道如何做到以下几点:

我创建了一个数组,其大小为我需要存储的最大元素数:

int[] myArray = new int[64000];
我正在将此阵列传递给第三方API。在这个API中,他们使用
.Length
属性来确定元素的数量。我不希望发生这种情况,因为数组长度是最大计数,而不是“活动计数”(即使用的元素数)


考虑到这一点,是否有办法创建另一个数组,其大小等于活动计数?而且,这可以在没有副本和/或分配的情况下完成吗?我已经有了分配的内存——我所要做的就是在很好地使用第三方API的同时指出感兴趣的子区域。

如果第三方API接受
int[]
,传递数据的唯一方法就是复制

如果不需要,可以很容易地设计API(即:传递元素的数量,或使用
ArraySegment
等),但是如果API不支持它,则需要一个副本


请注意,您可以使用大容量复制项,而不是在循环中进行复制。

听起来您应该使用
列表而不是数组,如果您不知道集合中将包含多少项。接受数组的API部分(方法)的确切声明是什么?我使用的是Unity,我正在做的是填充/管理垂直/法线/切线/uv/三角形数组。我想要一个这些数组的池,其中每个数组都是预先确定的最大大小。然后,随着内容的出现/消失,数组被填充(并不总是100%),我将它们传递给UnityEngine.Mesh()的一个实例。要填充UnityEngine.Mesh中的数组,我只需分配一个数组引用。没有副本。如果我想管理我自己的池,我现在必须分配精确大小的数组,并让它们进行垃圾收集。这违背了使用这些池的意义。我宁愿管理我自己的记忆,但我在这里没有看到很多选择。。。