【发布时间】:2012-01-09 09:38:56
【问题描述】:
我一直在调试我的一个 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.
我没想到会通过引用传递数组,但我还是不小心这样做了。
有没有办法通过 value 而不是通过引用来分配数组?我知道我可以遍历两个数组,分别分配每个术语,但这似乎不必要地复杂。我有理由确定 Clone() 函数,嗯,克隆,没有相应引用的值,但这是按值分配的唯一方法吗? IE。 currentVertices = levels[1].vertices.Clone();
Clone() 通常不被劝阻吗?按值传递数组的最佳做法是什么?
在短期内,我只是硬编码了加载后的值。
As one of my moderator friends remarked,
“我看到你通过by-pass-reference解决了pass-by-reference。”
【问题讨论】:
-
我看到您正在尝试按值传递数组。你应该完全放弃它并使用 jQuery。
-
“Clone() 通常不被劝阻吗?”据我所见,一般推荐。
-
你对这一切的理解似乎奇怪地倒退了。
-
有人可以解释他们的反对意见吗?请让我知道有什么不清楚的地方!
-
@Raven Dreamer,我没有投反对票。不清楚的一点是: currentVertices[0].Position.Z - 10;那是一种表达。没有任务。目前还不清楚这如何修改数组中的实例。
标签: c# arrays pass-by-value