gpt4 book ai didi

c# - 我应该如何按值传递数组? Clone() 是不是气馁了?

转载 作者:行者123 更新时间:2023-11-30 13:40:17 24 4
gpt4 key购买 nike

我一直在调试我的 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.

我没想到会通过引用传递数组,但我还是不小心这样做了。

有没有办法通过而不是通过引用来分配数组?我知道我可以遍历两个数组,单独分配每个术语,但这似乎不必要地复杂。我有理由相信 Clone() 函数可以克隆没有相应引用的值,但这是按值分配的唯一方法吗? IE。 currentVertices = levels[1].vertices.Clone();

Clone() 通常不被鼓励吗?按值传递数组的最佳做法是什么?

在短期内,我只是硬编码了加载后的值应该是什么。

As one of my moderator friends remarked,

"I see you solved pass-by-reference through by-pass-reference."

最佳答案

嗯,在 C# 中,只有值类型是“按值”传递的。 (这是一种过于简单化的方法,但这是一种很好的看待它的方式。)其他所有东西实际上都是按值传递的引用,这类似于传递指针。 (请注意,这与“通过引用”传递不同,后者允许在调用方法中更新变量。)

你有两个选择:

  1. 重构您的代码以避免改变数组中的对象
  2. 深度克隆阵列

这些大致按照我推荐的顺序排列。

关于c# - 我应该如何按值传递数组? Clone() 是不是气馁了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8321084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com