具有两个不同对象的参考的奇怪问题

时间:2019-01-15 16:18:28

标签: c# reference

将ClaimDetail添加到tmpClaim时,也会将此ClaimDetail添加到Claim。有人可以解释一下为什么会这样吗?

List<Claim> claims; // list data
foreach ( Claim claim in claims) {
  Claim tmpClaim = datacontext.Claims.FirstOrDefault ( c => c.Id == claim.Id );

  ClaimDetail claimDetail = new ClaimDetail ( );
  claimDetail.ClaimDetailType = "Type";

  // add claim
  datacontext.Claims.InsertOnSubmit ( tmpClaim );
  datacontext.SubmitChanges ( );
}

1 个答案:

答案 0 :(得分:2)

tmpClaim不是 new 对象。它仍然是对claims中元素的引用。

从本质上讲,这意味着tmpClaim也会发生您对claims所做的任何事情。他们是一样的东西。

如果您不希望对tmpClaim进行更改以影响claims,则需要创建一个new Claim(以及所有必要的复制/克隆)并执行您在该新对象上所做的所有工作。