C# 对于使用LINQ集合意外运行的每个循环

C# 对于使用LINQ集合意外运行的每个循环,c#,asp.net,linq,foreach,C#,Asp.net,Linq,Foreach,我很难理解为什么这个循环正在修改我正在循环的集合中的对象,而不仅仅是循环中的tempProvider对象 该代码位于另一个循环中,该循环遍历一个县列表。这个提供者有7个办公室,当我点击tempProvider.offices=。。。第一次通过它的行在县中只有一个匹配的办公室,因此它会清除countyPcps中提供者对象的其余办公室,这会影响我必须循环通过办公室的其他代码 谁能告诉我发生了什么事,我该如何纠正 我已经尝试了一些方法,包括删除OrderBy(x=>x.LastName),使其成为fo

我很难理解为什么这个循环正在修改我正在循环的集合中的对象,而不仅仅是循环中的
tempProvider
对象

该代码位于另一个循环中,该循环遍历一个县列表。这个提供者有7个办公室,当我点击
tempProvider.offices=
。。。第一次通过它的行在县中只有一个匹配的办公室,因此它会清除countyPcps中提供者对象的其余办公室,这会影响我必须循环通过办公室的其他代码

谁能告诉我发生了什么事,我该如何纠正

我已经尝试了一些方法,包括删除
OrderBy(x=>x.LastName
),使其成为for循环,以及删除countyPcps变量的
.ToList()
。我不知道发生了什么,看起来应该很简单

var countyPcps =
providersForCounty.Where(x =>
    x.SpecialtiesAndCerts != null && x.SpecialtiesAndCerts.Any() &&
    x.SpecialtiesAndCerts.Contains(specialty)).ToList();

foreach (Provider provider in countyPcps.Where(x => x.LastName != null).OrderBy(x => x.LastName))
{
    Provider tempProvider = provider;
    tempProvider.Offices = tempProvider.Offices.Where(x => x.County == county).ToList();
    xmlSerializer.Serialize(xmlWriter, tempProvider, ns);
}
我很难理解为什么这个循环要修改我正在循环的集合中的对象,而不仅仅是循环中的tempProvider对象

因为它是同一个对象。当您将
provider
分配给
tempProvider
时,您只需将引用复制到对象,而不是对象本身;
provider
tempProvider
仍然引用
provider
类的相同实例。如果
provider
是值类型,您将得到一个co对象的py,但由于它是引用类型,所以只会得到引用的副本