【问题标题】:Does changing a item field in a Collection while iterating invalidates the collection?迭代时更改集合中的项目字段是否会使集合无效?
【发布时间】:2009-11-29 17:10:09
【问题描述】:

如果这样做:

foreach(var a in col) {
     a.X = 1;
}

我对集合的迭代器会失效吗?

谢谢

【问题讨论】:

    标签: c# iterator enumerators


    【解决方案1】:

    没有。您可以访问集合中项目的成员。您的代码有效。

    你不能做的是在迭代时修改集合本身(通过删除或添加项目)。

    【讨论】:

      【解决方案2】:

      这应该不会造成问题。只有当您尝试通过执行col.Removecol.Add 来修改col 的内容时,我才会认为会有问题。

      【讨论】:

      • 谢谢大家:)我很怀疑,因为doc中的这句话:“如果对集合进行了更改,例如添加,修改或删除元素,则枚举器已不可恢复地失效,其行为未定义。”
      • 我猜在这种情况下,“修改”是指替换集合中的一个元素。
      猜你喜欢
      • 2011-02-14
      • 2021-06-15
      • 2011-03-20
      • 2013-07-13
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2013-05-13
      相关资源
      最近更新 更多