将新对象添加到列表时,先前已添加的所有对象都将被覆盖
When adding a new object to the list all the objects already added previously are overwritten
这是必须引用开放 classes 的列表。
readonly List<object> openedClasses = new List<object>();
这是我创建 classes 并添加列表的地方。
var employees = myWs.ReturnListEmployee(guid);
foreach (Api.EmployeeData employee in employees)
{
openedClasses.Add(new MyClass(pendingSchedules[0], employee));
}
我的class及其构造函数:
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 循环之前添加到列表中的所有值都被最近添加的值覆盖 class。
我已经尝试了我在互联网上找到的所有解决方案并进行了检查,class 不是静态的,我删除了调用它的每个静态方法和静态字段(只是为了确保),我创建的列表有和没有只读列表 "object" 和 "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;
}
这是必须引用开放 classes 的列表。
readonly List<object> openedClasses = new List<object>();
这是我创建 classes 并添加列表的地方。
var employees = myWs.ReturnListEmployee(guid);
foreach (Api.EmployeeData employee in employees)
{
openedClasses.Add(new MyClass(pendingSchedules[0], employee));
}
我的class及其构造函数:
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 循环之前添加到列表中的所有值都被最近添加的值覆盖 class。
我已经尝试了我在互联网上找到的所有解决方案并进行了检查,class 不是静态的,我删除了调用它的每个静态方法和静态字段(只是为了确保),我创建的列表有和没有只读列表 "object" 和 "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;
}