我想搞明白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也变成相同的了。
{
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也变成相同的了。
Datas.add(2,TempPoint);
Datas.add(5,TempPoint);
数组是引用类型,所以你对其中任意一个修改将导致所有都被修改。
Datas.add(1, TempPoint.Clone() as string[]);
Datas.add(2, TempPoint.Clone() as string[]);
Datas.add(3, TempPoint.Clone() as string[]);