我正在对过去使用一堆不断调整大小的多维数组的一堆代码进行大重构。我创建了一个数据对象来替换 2D 数组,现在我正在传递这些列表。
我发现了一些让我有点担心的事情。假设我有一些看起来像这样的代码:
List<NCPoint> basePoints = new List<NCPoint>();
// ... snip populating basePoints with starting data
List<NCPoint> newPoints = TransformPoints(basePoints, 1, 2, 3);
public List<NCPoint> TransformPoints(List<NCPoint> points, int foo, int bar, int baz){
foreach(NCPoint p in points){
points.X += foo
points.Y += bar
points.Z += baz
}
return points;
}
想法是保留原始点列表 ( basePoints
) 和更新点列表 ( newPoints
)。但是 C# 通过引用传递列表,与任何对象一样。此更新basePoints
到位,因此现在两者都basePoints
将newPoints
具有相同的数据。
目前,我正在尝试在List
处理数据之前小心制作传入的完整副本。这是确保对函数内对象的更改不会在函数外产生副作用的唯一明智方法吗?有什么类似于传递对象的东西const
吗?