是否可以使用某种技术更改数组的Length属性?
我需要将数组的前x个成员传递给方法.项目要求阻止我分配任何堆分配,因此我不能使用任何Array.Resize()
或创建新数组.
此外,我无法更改SetVertices代码,因为它属于另一个库.它需要V[]
.我无法传递IList
或传递V*
给它.
public void BuildIt(V[] verts,int x){ verts.Length = x; //Compile error mesh.SetVertices(verts); }
当然代码不会编译.我需要一些像反射或扩展方法这样的技术来将数组伪装成更小而不实际创建更小的数组.我希望SetVertices()方法认为数组有x个成员,即使它有更多.
编辑:
测试了以下方法,它们不起作用:
stackalloc不起作用,因为它不会创建(或者我无法获得)真正的数组.
偷看单项目我发现数组的Length属性调用GetLenght()和GetRank()方法来确定长度.抛开一个不好的做法,我不能用扩展方法覆盖这个方法,因为实例方法优先于扩展方法(或者有没有办法强制使用?).
接下来会尝试代码注入.
EDIT2:
试图将代码发送到Array.GetLength()
和Array.Length
.似乎没有简单,可靠,跨平台和干净的方法来在运行时更改现有的方法体.