-1

我有以下代码可以根据 Id 从以前的记录中复制新记录。

 //selecting the employee to be copied.
 Employee emp=employeeList.Where(p=>p.Id==2).Single();

 //Increasing the Employee Id.
 Employee NewEmp=new Employee();
 NewEmp=emp;
 NewEmp.Id=employeeList.Max(p=>p.Id)+1;

 //Adding to the List.
 employeeList.Add(NewEmp);

但是新记录已成功添加。现有的 Record Id 也已更改为 New Max Id 3,因为它是上下文。

请有人帮我停止更新现有的记录对象。

4

4 回答 4

1

当你写这个:

Employee NewEmp=new Employee();
NewEmp=emp;

您创建新对象(第一行),然后(第二行)在变量 NewEmp 中分配“emp”,现在它们都引用同一个对象,因此实际上您使用的是一个对象。您实际创建的新员工将被 GC 收集。

你可以从值类型和引用类型之间的差异中学到更多。

于 2012-11-27T11:17:57.440 回答
1

你在这里做的分配:

Employee NewEmp=new Employee();

完全无效,新实例被以下行放弃:

NewEmp=emp;

您必须emp逐个字段(逐个属性)复制内容。在您的情况下,我建议您ICloneableEmployee-参见 MSDN以获取文档。

另一个选项包括:

但是,对于您预期的技能水平,我不推荐任何一种方式。


注意:通常的做法是局部变量的名称以小写字母开头,例如'newEmp'。

于 2012-11-27T11:18:44.290 回答
0

您将旧分配给Employee变量NewEmp并将其更新NewEmp.Id为 3。然后您Employee再次将其添加到列表中。所以你在列表中有两个相同Employee的 s Id = 3

于 2012-11-27T11:18:44.693 回答
0

这条线

newEmp = emp;

不复制emp。它只是创建对内存中相同位置的新引用。如此有效emp,并且newEmp是一个相同的,但不是两个单独的内存块。阅读“参考类型”,例如:http ://www.albahari.com/valuevsreftypes.aspx

于 2012-11-27T11:25:25.283 回答