我对c#很新,所以我对此感到有点困惑。我在for
循环中有一个函数,它引用一个数组并返回另一个数组,但它所接受的数组也被修改了。每次传入数组之前是否需要克隆数组?
for (int floor = 0; floor < numberOfFloors; ++floor)
{
// takes in linePoints, does some calculations and returns a new list
List<Vector3> floorLinePoints = processFloorSetbacks(linePoints);
}
原始的linePoints数组在每次迭代时都会被修改 - 它是否意味着这样做?
答案 0 :(得分:2)
如果您修改linepoint
中的每个processFloorSetbacks
,则更改将保留在那里,您将需要使用所需的修改重新创建每个linePoint
,或克隆它们以重新创建列表。即不要编辑传入的那个。
您可以通过在processFloorSetbacks
方法开头选择新列表并使用克隆列表进行修改来克隆列表
var clonedList = linePoints.Select(x => new Vector3
{
SomeValue = x.SomeValue,
SomeOtherValue = X.SomeOtherValue,
// and so on
}
或者它可能就像将一些初始参数传递给它的构造函数一样简单(我不确定)
var clonedList = linePoints.Select(x => new Vector3( x.SomeValue, x.SomeOtherValue));
注意:由于我不确定统一3结构Vector3,所以我不确定你将如何克隆它们,也许这应该是Unity3d工作人员的另一个问题。