问题描述
List<int[]>aaa=newList<int[]>();int[]bbb=newint[4];int[,]pic1_point={{1,2,3,4,5},{2,3,4,5,6}};int[,]pic2_point={{3,4,5,6,7},{4,5,6,7,8}};for(intr=0;r<5;r++){bbb[0]=pic1_point[0,r];bbb[1]=pic1_point[1,r];bbb[2]=pic2_point[0,r];bbb[3]=pic2_point[1,r];aaa.Add(bbb);}
我想实现的功能是aaa[0]中存储的是{1,2,3,4},aaa[1]中存储的是{2,3,4,5}以此类推,但结果是aaa[0]到aaa[4]中存储的都是{5,6,7,8},我百思不得其解,求大神指点!!
解决方案
解决方案二:
List<int[]>aaa=newList<int[]>();//int[]bbb=newint[4];int[,]pic1_point={{1,2,3,4,5},{2,3,4,5,6}};int[,]pic2_point={{3,4,5,6,7},{4,5,6,7,8}};for(intr=0;r<5;r++){int[]bbb=newint[4];bbb[0]=pic1_point[0,r];bbb[1]=pic1_point[1,r];bbb[2]=pic2_point[0,r];bbb[3]=pic2_point[1,r];aaa.Add(bbb);}
解决方案三:
引用1楼xuzuning的回复:
List<int[]>aaa=newList<int[]>();//int[]bbb=newint[4];int[,]pic1_point={{1,2,3,4,5},{2,3,4,5,6}};int[,]pic2_point={{3,4,5,6,7},{4,5,6,7,8}};for(intr=0;r<5;r++){int[]bbb=newint[4];bbb[0]=pic1_point[0,r];bbb[1]=pic1_point[1,r];bbb[2]=pic2_point[0,r];bbb[3]=pic2_point[1,r];aaa.Add(bbb);}
为什么这样就可以了?可以给我讲一下么?
解决方案四:
因为数组是引用类型也就是说,你的代码中向aaa添加的5个bbb实际上就是一个
解决方案五:
简单一句话说,就是你add进List之前,new一下再赋值,再add进List
解决方案六:
你把同一个数组加入4次,里面当然是同一种值.可以复制一下再加入.aaa.Add((int[])bbb.Clone());