C# 字段变量的行为不符合预期

C# 字段变量的行为不符合预期,c#,C#,我正在尝试将项目添加到我的事件处理程序btnClone\u Click中的(客户)。我很难理解为什么Add方法在for循环迭代时表现不正确-列表保持计数为1,并在调用Add方法时覆盖自身 如果我声明自定义列表的本地对象(abc),则此对象的行为正确,并存储所有克隆 private Customer customer; private List<Customer> customers; private void Form1_Load(object sender, System.E

我正在尝试将项目添加到我的事件处理程序btnClone\u Click中的(客户)。我很难理解为什么Add方法在for循环迭代时表现不正确-列表保持计数为1,并在调用Add方法时覆盖自身

如果我声明自定义列表的本地对象(abc),则此对象的行为正确,并存储所有克隆

private Customer customer;
private List<Customer> customers;  

private void Form1_Load(object sender, System.EventArgs e)
{
     customer = new Customer("John", "Mendez", "jmendez@msysco.com");
     lblCustomer.Text = customer.GetDisplayText();
}
private void btnClone_Click(object sender, EventArgs e)
{
     List<Customer> abc = new List<Customer>();         
     for (int i = 0; i < 5; i++)
     {
          customers = new List<Customer>();
          Customer cust = (Customer)customer.Clone();
          customers.Add(cust);
          abc.Add(cust);
     }
}
私人客户;
私人名单客户;
私有void Form1_加载(对象发送方,System.EventArgs e)
{
客户=新客户(“约翰”、“门德斯”jmendez@msysco.com");
lblCustomer.Text=customer.GetDisplayText();
}
私有void btnClone\u单击(对象发送者,事件参数e)
{
列表abc=新列表();
对于(int i=0;i<5;i++)
{
客户=新列表();
Customer cust=(Customer)Customer.Clone();
添加(cust);
abc.Add(客户);
}
}

因为您正在初始化循环中的
客户
字段

customers = new List<Customer>();
客户=新列表();

我认为您应该将该行移到
Form1\u Load
函数内部或仅在需要时初始化的其他位置。

每次迭代都会生成一个新列表并在其中添加一项。所以看起来你的清单上只有最后一项了。因此,您必须使用更改按钮事件

private void btnClone_Click(object sender, EventArgs e)
{
     List<Customer> abc = new List<Customer>();
     customers = new List<Customer>();
     for (int i = 0; i < 5; i++)
     {
          Customer cust = (Customer)customer.Clone();
          customers.Add(cust);
          abc.Add(cust);
     }
}
private void btnClone\u单击(对象发送者,事件参数e)
{
列表abc=新列表();
客户=新列表();
对于(int i=0;i<5;i++)
{
Customer cust=(Customer)Customer.Clone();
添加(cust);
abc.Add(客户);
}
}

对不起,我看到了错误。我一直在循环中重新初始化列表。谢谢,我在提交问题后就注意到了。这个过程可能是我调试的新工具。