我想搞明白dictionary的TValue可以为数组吗?应如何正确声明?例如:首先,自定义结构体    public struct Point
        {
            public Int16 Step;
            public Int16 Z;
            public Int16 AD;
        }然后,声明dictionary,和一个空数组
public Point[] TempPoint = new Point[40];
public Dictionary<Int16, Point[]> Datas = new Dictionary<short, Point[]>();
Datas.add(1,TempPoint);              //赋初值,使datas大小确定,值为0.
Datas.add(2,TempPoint);
Datas.add(5,TempPoint);在这之后对datas每个元素进行赋值,出现问题,例如
datas[1][0].Step = 555;
却会导致
datas[2][0].Step = 555
datas[5][0].Step = 555对任何一个key内的数组的任何一个元素赋值,均会导致所有的key的相同位置的元素被赋为相同的值。
代码很简单,涉及到的内容就以上部分,就不详细贴了。总之一句话,对某key的元素进行赋值,结果其他key的Value也变成相同的了。

解决方案 »

  1.   

    public Point[] TempPoint = new Point[40]; Datas.add(1,TempPoint);              //赋初值,使datas大小确定,值为0. 
    Datas.add(2,TempPoint); 
    Datas.add(5,TempPoint); 
    数组是引用类型,所以你对其中任意一个修改将导致所有都被修改。
      

  2.   

    数组是一个引用,任何地方改动它,其他引用的地方就会用到新的值。关键是把不同的数组放到Dictionary中去。比如可以把存数组克隆,以断开相互影响。
    Datas.add(1, TempPoint.Clone() as string[]);
    Datas.add(2, TempPoint.Clone() as string[]);
    Datas.add(3, TempPoint.Clone() as string[]);