.NET Framework的原则是一旦创建了一个枚举对象,会在原处及时得到包含在可枚举对象的项目的快照。如果初始对象发生了改变,枚举就会无效,下次调用枚举对象的任何一种方法时枚举对象会抛出InvalidOperationException。所有的.NET Framework类都遵循这些原则,用户所写的枚举类型同样如此。然而,由于性能方面的原因,在创建可枚举对象时,架构中的枚举对象实际上并没有复制所有的项目。它们只是把引用保存回到可枚举对象中,并提供了一个逻辑快照。把一个引用和一个索引保存到初始枚举对象中比复制每个项目要廉价得多,对一个巨大的集合来说,复制项目是个非常昂贵的过程。