我有简单的类结构,其字段的数组部分。我想将这个类存储在一个列表中。问题是当它将其他类结构添加到它处理它的列表时,好像它是一个直接更新而没有被引用。
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。我一定错过了什么?
答案 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
构造函数内部复制数组,或者(正如其他人建议的那样)在构造函数调用中使用不同的数组。