【发布时间】:2013-12-23 16:29:58
【问题描述】:
我有一个名为temp 的变量,其类型为List<Point>。出于某种原因,当我调用sanitize(temp) 时,变量temp 似乎发生了变化。我知道变量temp 发生了变化,因为如果我包含sanitize(temp) 行,我在C:\out.bmp 上得到的输出是不同的。我从消息框得到的输出是“温度没有改变。”
List<Point> original = temp;
sanitize(temp);
if (temp.Equals(original)) {
MessageBox.Show(@"temp was not changed.");
} else {
MessageBox.Show(@"temp was changed.");
}
outputPointsOnBitmap(temp.ToArray(), ref windowBitmap, Color.Yellow);
windowBitmap.Save("C:\\out.bmp");
为了好奇,这里有更多的源代码:
private void outputPointsOnBitmap(Point[] points, ref Bitmap bitmap, Color markerColor) {
foreach (Point point in points) {
bitmap.SetPixel(point.X, point.Y, markerColor);
}
}
private List<Point> sanitize(List<Point> crossPoints) {
SortedSet<int> indexesToDelete = new SortedSet<int>();
for (int i = 0; i < crossPoints.Count() - 1; i++) {
if (Math.Abs(crossPoints[i + 1].X - crossPoints[i].X) <= 5 &&
Math.Abs(crossPoints[i + 1].Y - crossPoints[i].Y) <= 5) {
indexesToDelete.Add(i);
indexesToDelete.Add(i + 1);
}
}
foreach (int i in indexesToDelete.Reverse()) {
crossPoints.RemoveAt(i);
}
return crossPoints;
}
这让我发疯了。
【问题讨论】:
-
您正在使用参考资料。您正在传递 value 是的。但是您传递的值是对您列表的 reference。
-
@aquinas: 我怎么知道我是在使用对对象的引用还是对象本身?我想所有列表都只是对对象的引用?如果我有一个
Point类型的变量怎么办。那是对象还是对对象的引用? -
C# 有引用类型和值类型。您应该阅读以下内容:msdn.microsoft.com/en-us/library/490f96s2.aspx 以获得更好的理解。