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,但由于它是引用类型,所以只会得到引用的副本