将新对象添加到列表时,将覆盖以前已添加的所有对象
本文关键字:添加 对象 覆盖 列表 新对象 | 更新日期: 2023-09-27 18:00:02
这是必须引用打开类的列表。
readonly List<object> openedClasses = new List<object>();
这是我创建类和添加列表的地方。
var employees = myWs.ReturnListEmployee(guid);
foreach (Api.EmployeeData employee in employees)
{
openedClasses.Add(new MyClass(pendingSchedules[0], employee));
}
我的类及其构造函数:
class MyClass
{
public Schedule schedule;
public MyClass(Schedule schedule, Api.EmployeeData employee)
{
// the "schedule.EmployeeData" it is constantly changed
this.schedule = schedule;
this.schedule.EmployeeData = employee;
}
}
我的问题是:每次foreach循环,以前添加到列表中的所有值都会被最近添加的类覆盖。
我已经尝试了我在互联网上找到的所有解决方案,并进行了检查,该类不是静态的,我删除了对其调用的每个静态方法和静态字段(只是为了确保),我创建的列表中有和没有只读的"对象"列表和"MyClass"列表。
带有:
openedClasses.Add(new MyClass(pendingSchedules[0], employee));
与:
var myClass = new MyClass(pendingSchedules[0], employee);
openedClasses.Add(myClass);
所以您正在循环并调用:
new MyClass(pendingSchedules[0], employee)
传递相同的对象pendingSchedules[0]
。在构造函数中,您正在执行以下操作:
this.schedule.EmployeeData = employee;
其中this.schedule
是相同的对象参考pendingSchedules[0]
您每次都在更改其员工,但引用保持不变
您可能只想在Schedule
上创建一个Clone
方法,以便每次都从同一引用创建一个新的引用,并将员工放在上面:
class Schedule
{
public Schedule Clone()
{
return new Schedule
{
ValueType1 = this.ValueType1
}
}
}
注意:克隆的想法是断开引用,因此确保要分配给新Schedule
引用的任何对象都以类似的方式断开。这就是为什么我说ValueType
,因为没有与它们相关联的引用。所以string
、int
、long
等可以像上面一样复制
现在你可以这样做了:
public MyClass(Schedule schedule, Api.EmployeeData employee)
{
this.schedule = schedule.Clone();
this.schedule.EmployeeData = employee;
}