填充List<>使用Array获取错误的数字

时间:2012-04-01 11:51:30

标签: c++ list

我有简单的类结构,其字段的数组部分。我想将这个类存储在一个列表中。问题是当它将其他类结构添加到它处理它的列表时,好像它是一个直接更新而没有被引用。

 public class TrayLayout
 {
      public int[] inerD { get; set; }

public class TrayLayout
 {
      public int[] inerD { get; set; }

      public TrayLayout(int[] inerD)
      {
           this.inerD = inerD;
       }
 }
 public partial class Form1 : Form
 {
      public List<TrayLayout> trayL = new List<TrayLayout>();
      public Form1()
      {
           InitializeComponent();
      }

      private void Form1_Load(object sender, EventArgs e)
      {
           int[] aa = new int[2];
           aa[0]=1;
           aa[1]=2;
           //add the new class to TrayLoayout
           trayL.Add(new TrayLayout(aa));
           aa[0]=3;
           aa[1]=4;
           //add the new class to TrayLoayout using input array
           trayL.Add(new TrayLayout(aa));
           aa[0]=5;
           aa[1]=6;
           //add the new class to TrayLoayout
           trayL.Add(new TrayLayout(aa));
           textBox1.Text = "the numbers accepted \n"+ trayL[0].inerD[0].ToString() + " , " +trayL[0].inerD[1].ToString() + " \n" + trayL[1].inerD[0].ToString() + " , " +trayL[1].inerD[1].ToString() + " \n" + trayL[2].inerD[0].ToString() + " , " +trayL[2].inerD[1].ToString() ;

      }

我进入TextBoxes它显示最后输入5,6 5,6 5,6而不是1,2 3,4 5,6。我一定错过了什么?

4 个答案:

答案 0 :(得分:2)

您总是引用相同的 int数组,覆盖以前的值。

答案 1 :(得分:0)

您已创建1个ArrayObject aa。当你指定3和4时,你将覆盖前2个值。当你指定5和6时,你已经覆盖3和4。

创建3个不同的数组或将aa [0]设为aa [5]。

答案 2 :(得分:0)

你需要替换它:

int[] aa = new int[2];
aa[0]=1;
aa[1]=2;
//add the new class to TrayLoayout
trayL.Add(new TrayLayout(aa));
aa[0]=3;
aa[1]=4;
//add the new class to TrayLoayout
trayL.Add(new TrayLayout(aa));
aa[0]=5;
aa[1]=6;
//add the new class to TrayLoayout
trayL.Add(new TrayLayout(aa));

有了这个:

trayL.Add(new TrayLayout(new int[]{1,2}));
trayL.Add(new TrayLayout(new int[]{3,4}));
trayL.Add(new TrayLayout(new int[]{5,6}));

修改

你可以这样做:

var start=1;
var end=13;
trayL.Add(new TrayLayout(Enumerable.Range(start,end).ToArray()));

答案 3 :(得分:0)

int数组分配给TrayLayout类不会复制。示例中TrayLayout类的每个实例都引用了相同的数组,因此在调用TrayLayout构造函数后更新它时,{的所有实例都是{ {1}}看到相同的值。

TrayLayout构造函数内部复制数组,或者(正如其他人建议的那样)在构造函数调用中使用不同的数组。