C# 两个不同对象具有引用的奇怪问题

C# 两个不同对象具有引用的奇怪问题,c#,reference,C#,Reference,将ClaimDetail添加到tmpClaim时,此ClaimDetail也将添加到索赔中。有人能解释一下为什么会发生这种情况吗 List<Claim> claims; // list data foreach ( Claim claim in claims) { Claim tmpClaim = datacontext.Claims.FirstOrDefault ( c => c.Id == claim.Id ); ClaimDetail claimDetail =

将ClaimDetail添加到tmpClaim时,此ClaimDetail也将添加到索赔中。有人能解释一下为什么会发生这种情况吗

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 ( );
}
列出索赔;//列表数据
foreach(索赔中的索赔){
Claim tmpClaim=datacontext.Claims.FirstOrDefault(c=>c.Id==Claim.Id);
ClaimDetail ClaimDetail=新的ClaimDetail();
claimDetail.ClaimDetailType=“Type”;
//添加索赔
datacontext.Claims.InsertOnSubmit(tmpClaim);
datacontext.SubmitChanges();
}

tmpClaim
不是新对象。它仍然是对
声明中元素的引用

这本质上意味着,无论您对
tmpClaim
做什么,都会发生在
声明中。它们是一样的


如果您不希望对
tmpClaim
的更改影响
声明
,则需要创建一个
新声明
(以及任何必要的复制/克隆),并对该新对象执行所有工作。

假设我有两张纸,上面都写着“纽约市芝麻街123号”。我去了第一张纸上提到的房子。它有一扇蓝色的门。我把那所房子的门漆成红色。现在我去第二张纸上提到的房子。那房子有蓝色的门吗?为什么或者为什么不?@EricLippert-Arrgghh…发现了问题,觉得自己很愚蠢,因为我已经检查了很多次代码。列表“claims”似乎有一些对象(来自datacontext)具有相同的地址。假设列表中的任何项都没有对de datacontext中的对象的引用。感谢您的回复和解释,这有助于发现问题请参阅我对@EricLippert的评论。感谢您的回复和解释,这有助于发现问题。