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