这是必须引用开放类的列表。
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循环中所有先前添加到列表中的值都会被最近添加的类覆盖。
我已经尝试了我在互联网上找到的所有解决方案并进行了检查,该类不是静态的,我删除了每个静态方法和在其上调用的静态字段(只是为了确保),列表我创建了有和没有readonly作为&#34;对象&#34;的列表。以及作为&#34; MyClass&#34;。
的列表使用:
openedClasses.Add(new MyClass(pendingSchedules[0], employee));
并且:
var myClass = new MyClass(pendingSchedules[0], employee);
openedClasses.Add(myClass);
答案 0 :(得分:0)
所以你在循环和调用:
new MyClass(pendingSchedules[0], employee)
传递相同的对象pendingSchedules[0]
。在构造函数中,您正在执行此操作:
this.schedule.EmployeeData = employee;
其中this.schedule
是同一个对象引用pendingSchedules[0]
每次您都在更改员工,但参考保持不变
您可能只想在Clone
上创建一个Schedule
方法,这样您每次都可以从同一个引用中创建一个新引用,并将该员工放在该引用上:
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;
}