0

有人可以帮助我使用此代码,它假设更改 selected_deparmtents 列表中部门的 Lft 和 Rgt 属性。我遇到的问题是在保存先前部门 Lft 和 Rgt 属性的临时变量中获取旧值或先前值。它所做的是在 temp.Lft 属性上显示更新的值,这是错误的我希望以前的 Lft 属性进行计算。有谁知道我该如何解决这个问题

int counter = 0;
int lft = department.Lft;
int rgt;
Department temp;
List<Department> clones = new List<Department>(selected_departments);                   

foreach (Department dept in selected_departments)
{
    if (counter < 1)
    {
       rgt = (dept.Rgt - dept.Lft);                            
       dept.Lft = lft;
       dept.Rgt = lft + rgt;
    }
    else
    {                                                        
        temp = clones.ElementAt(counter - 1); // <-- incorrect 
        // previous departments value should be old value 
        lft = lft + (dept.Lft - temp.Lft);// here temp.Lft always show the newly updated value
        rgt = lft + (dept.Rgt - dept.Lft);

        dept.Lft = lft;
        dept.Rgt = rgt;
    }
    db.Entry(dept).State = EntityState.Modified;
    db.SaveChanges();            
    counter++;
}
4

1 回答 1

4

问题是您实际上并没有在clones List. 相反,它具有对部门的所有引用的副本,因此当您更新一个时,它会更改两者中的值。

Department假设您的构造函数采用左右参数,这看起来可以通过以下方式修复:

List<Department> clones = new List<Department>(selected_departments.Count);                   
for (int i = 0; i < selected_departments.Count; i++)
{
    clones.Add(new Department(selected_departments[i].Lft, selected_departments[i].Rgt));
}
于 2013-08-21T23:36:33.527 回答