代码之家  ›  专栏  ›  技术社区  ›  driis

为什么要避免使用foreach迭代不可变的值类型集合?

  •  11
  • driis  · 技术社区  · 16 年前

    在一份编码标准文档中,我发现了这样一句话:

    不可变值类型集合。 例如字符串数组。

    3 回复  |  直到 16 年前
        1
  •  18
  •   Jon Skeet    16 年前

    你不应该回避它。你正在读的编码标准文件是胡说八道。试着找到作者,让他解释一下。

    除此之外, string 是引用类型,数组总是可变的。。。老实说,这让我担心文件其余部分的质量。还有其他可疑的建议吗?

        2
  •  8
  •   Guffa    16 年前

    我认为这种说法的原因是它写在.NET2.0之前。

    在.NET1.x中使用foreach时,它使用 IEnumerable 接口(作为 IEnumerable<T> 当对值类型集合进行迭代时,枚举器会将每个项装箱,以便能够将其作为对象引用返回,然后foreach代码必须将其取消装箱。

    字符串数组当然不是值类型数组的示例。整数数组无效。

        3
  •  6
  •   Brian Rasmussen    16 年前

    我同意乔恩的意见,这个建议毫无意义。我猜作者发现在迭代时不能更改当前项的值。但是,如果要迭代引用类型的集合,仍然可以修改当前项指向的对象。也许他得出结论,对于值类型集合,迭代以某种方式被破坏了。

    推荐文章