日期:2014-05-17  浏览次数:20780 次

自定义结构中使用集合的问题
     public struct Actions
        {
            public int[] X;
            public int[] Y; //位置
            public int[] FX;//方向   0横向1纵向
            public int[] Num;//数量
            public int[] XZH;//形状  0方头1尖头
            public int[] CHang;//长度,宽或者高
            public int[] JianGe;//如果数量不为0,就有间隔.

            public ArrayList JuXing;//矩形集合
            public Rectangle JD;//焦点矩形
            public Rectangle YYDFW;//移动范围
            public int YYDFX;//移动方向
            public Rectangle OOldJiaoDian;//上一次的焦点
        }
        ArrayList ActBack = new ArrayList();//所有动作的集合 //撤消的集合

最近在搞一个GDI+绘图里的撤消,后退的操作,基本想法是把每一步的操作,保存为一个自定义的结构(用集合中的数组来区分每一步),然后每一步里重要的东西,都存在一个集合里面,这样,撤消,后退的时候,就可以根据每个结构中,不一样的集合,来操作!

可是结果发现,public ArrayList JuXing 这个集合,是同步的!

我的本意,是这个矩形,每一步每一步,都不一样的,比如,点一下,第一次只有两个矩形,再点一下,第二次就有3个矩形,结果发现,实际运行起来之后,结构中的集合,只要一赋值,所有的ActBack里面的Actions.JuXing,全部都变成相同的了.

感觉在C#里面,好象结构用New的时候,New不出新的东西,都是相同的一个东西!

这种问题,我该怎么办呢?难道换成自定义的类吗??请给点思路!谢谢!

------解决方案--------------------
结构是值类型的,可以考虑用类来实现。
------解决方案--------------------
 public ArrayList JuXing = new ArrayList();

每个结构体必须维护单独的列表,而不是指向同一个。