制作一个独立的List <t>

时间:2016-10-31 09:47:30

标签: c# list

我想在班上有两个积分列表。一个用于最初加载的值,另一个用于修改后的值。我在班上制作了两个单独的列表,但是当我尝试通过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;
            }
        }
}

2 个答案:

答案 0 :(得分:2)

您现在正在保存相同的引用,因此如果您更改了一个对象,实际上您正在更改另一个对象,因为它具有相同的引用。

您需要做的是复制原始对象。通常,您可以为此实现ICloneable接口,或者使您拥有自定义方法来复制对象。另一个选择是使类成为一个结构,它将使其本身具有按值复制。

答案 1 :(得分:2)

实际上您正在保存相同的引用,因此很明显您会将更改反映到2个列表中。我建议使用Point结构而不是类,因此您将使用复制值而不是引用或建议实现ICloneable接口来实现复制逻辑。