Rav*_*mer 3 c# arrays pass-by-value
我一直在调试我的C#程序,经过几次无结果的时间跨度,发现错误来自"意外"通过引用而不是值传递数组.
这是一些伪代码:
//1st pass
currentVertices = levels[0].vertices;
currentVertices[0].Position.Z -= 10;
//2nd pass
currentVertices = levels[1].vertices;
currentVertices[0].Position.Z -= 10;
//3rd pass
currentVertices = levels[0].vertices;
currentVertices[0].Position.Z -= 10;
//currentVertices[0].Position.Z is now 10 less than expected;
//20 less than it started. Further loops will increase the difference in expected
//value.
Run Code Online (Sandbox Code Playgroud)
我没想到会通过引用传递数组,但无论如何我不小心这样做了.
有没有办法按值而不是按引用分配数组?我知道我可以迭代两个数组,分别指定每个术语,但这似乎不必要地复杂.我有理由相信Clone()函数,克隆,没有相应引用的值,但是这是按值分配的唯一方法吗?即currentVertices = levels[1].vertices.Clone();
Clone()一般不气馁吗?按值传递数组的最佳做法是什么?
在短期内,我只是硬编码加载后的值应该是什么.
"我看到你通过旁路参考解决了传递引用."
好吧,在C#中,只有"按值"传递值类型.(这是过于简单化,但这是一种看待它的好方法.)其他所有东西实际上都是一个通过值传递的引用,类似于传递指针.(请注意,这与传递"by ref"不同,后者允许在调用方法中更新变量.)
您有两种选择:
这些大致按我推荐的顺序排列.