做一个独立的清单< >

本文关键字:独立 一个 | 更新日期: 2023-09-27 18:15:49

我想在我的类中有两个点列表。一个用于最初加载的值,另一个用于修改后的值。我在我的类中制作了两个单独的列表,但当我试图通过change_points方法改变它时,start_pnts列表也改变了它的值。我不知道我做错了什么。对于这个简单的问题,任何帮助我都会很感激。

  class Polygon : Shape
    {
        private List<Point> points = new List<Point>();
        private List<Point> start_pnts = new List<Point>();
       public override void add_point(Point pnt)
        {
            start_pnts.Add(pnt);
            points.Add(pnt);        
        }
        public override void change_points(double x, double y)
        {
            for (int i = 0; i < points.Count; i++)
            {
                points[i].x = start_pnts[i].x + x;
                points[i].y = start_pnts[i].y + y;
            }
        }
}

做一个独立的清单< >

实际上您保存的是同一个引用,因此很明显,您将得到反映到两个列表中的更改。我建议使用Point结构体而不是类,因此您将使用复制值而不是引用,或者按照建议实现ICloneable接口来实现那里的复制逻辑。

你现在保存相同的引用,所以如果你改变一个对象,你实际上也改变了另一个对象,因为它持有相同的引用。

你要做的就是复制原始对象。通常,您可以为此实现ICloneable接口,或者创建自己的自定义方法来复制对象。另一个选择是使类成为一个结构,这将使它本质上是一个按值复制。