【问题标题】:For Each loop behaving unexpectedly with LINQ collectionFor Each 循环在 LINQ 集合中表现异常
【发布时间】:2014-07-21 18:55:06
【问题描述】:

我无法理解为什么这个循环会修改我正在循环的集合中的对象,而不仅仅是循环内的tempProvider 对象。

此代码位于另一个循环中,该循环遍历县列表。该提供商一开始有 7 个办公室,然后当我第一次点击tempProvider.Offices = ... 线时,它在县内只有一个匹配的办公室,因此它会擦除 CountyPcps 中 Provider 对象的其余办公室,这影响我必须遍历办公室的其他代码。

谁能告诉我发生了什么以及我该如何纠正这个问题?

我已经尝试了一些方法,包括删除 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);
}

【问题讨论】:

    标签: c# asp.net linq foreach


    【解决方案1】:

    我无法理解为什么这个循环会修改我正在循环的集合中的对象,而不仅仅是循环内的 tempProvider 对象。

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

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2011-10-28
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多