我有一個變量temp
,它的類型爲List<Point>
。由於某種原因,當我撥打sanitize(temp)
時,變量temp
似乎發生了變化。我知道變量temp
會發生變化,因爲如果我包含sanitize(temp)
行,我在C:\out.bmp
上得到的輸出是不同的。我從消息框中得到的輸出是「temp沒有改變。」爲什麼我的變量List <Point>被改變,即使我沒有使用引用?
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 * yes。但是您傳遞的價值是*列表*的參考*。 – aquinas
@aquinas:我如何知道我是否使用對象或對象本身的引用?我想所有的列表只是對象的引用?如果我有一個'Point'類型的變量會怎麼樣?那是一個對象還是對象的引用? – user3130149
C#具有引用類型和值類型。您應該閱讀以下內容:http://msdn.microsoft.com/en-us/library/490f96s2.aspx以獲得更好的理解。 – aquinas