通过Reflection修改Array Length属性

时间:2018-03-10 17:40:52

标签: c# arrays unity3d reflection private

所以,我遇到了一个奇怪的问题。

为了让你了解我想要实现的目标,但却悲惨地失败了:

int[] testArray = new int[100];

typeof(int[])
.GetProperty("Length", BindingFlags.Instance | BindingFlags.Public)
.SetValue(testArray, 50);

是的,也就是说,我想修改C#数组的长度属性(只使它小于实际大小),不用制作新数组和复制内容 - 以避免GC等... < / p>

背景:

在Unity中,有这个功能:

void SetIndices(int[] indices, MeshTopology topology, int submesh, bool calculateBounds);

如你所见,SetIndices并不接受&#34; start&#34;和&#34;结束&#34;或者至少&#34;长度&#34;作为参数。这就是为什么我想修改我的索引数组的长度来欺骗这个函数。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您无法在C#中调整array的大小。这是一个很难的事实。

实际上,Array.Resize方法会创建一个新数组,并将新数组的值复制到新数组中。