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

时间:2015-01-27 05:31:43

标签: c#

我正在尝试在事件处理程序btnClone_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);
     }
}

2 个答案:

答案 0 :(得分:2)

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

customers = new List<Customer>();

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

答案 1 :(得分:0)

每次迭代都会生成一个新列表并在其中添加一个项目。所以看起来你的列表中只有最后一项。因此,您必须使用

更改Button event
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);
     }
}