mor*_*avi 11 c# arrays unity-game-engine
是否可以使用某种技术更改数组的Length属性?
我需要将数组的前x个成员传递给方法.项目要求阻止我分配任何堆分配,因此我不能使用任何Array.Resize()或创建新数组.
此外,我无法更改SetVertices代码,因为它属于另一个库.它需要V[].我无法传递IList<V>或传递V*给它.
public void BuildIt(V[] verts,int x){
verts.Length = x; //Compile error
mesh.SetVertices(verts);
}
Run Code Online (Sandbox Code Playgroud)
当然代码不会编译.我需要一些像反射或扩展方法这样的技术来将数组伪装成更小而不实际创建更小的数组.我希望SetVertices()方法认为数组有x个成员,即使它有更多.
编辑:
测试了以下方法,它们不起作用:
接下来会尝试代码注入.
EDIT2:
试图将代码发送到Array.GetLength()和Array.Length.似乎没有简单,可靠,跨平台和干净的方法来在运行时更改现有的方法体.
如果您确实必须以最高性能执行此操作 - 那么您必须了解您使用的特定CLR 的内存布局(在您的情况下似乎是 Mono 的某些版本)。然后您可以执行一些更改和恢复数组长度的不安全代码。但它不可维护且危险。