为什么IEnumerable <T>没有实现Add(T)?

Che*_*hen 12 .net c# generics collections ienumerable

刚刚发现它,Add(T)定义在ICollection<T>,而不是IEnumerable<T>.Enumerable.cs中的扩展方法不包含Add(T),我认为这很奇怪.由于对象是可枚举的,因此它必须"看起来像"一组项目.谁能告诉我为什么?

Ste*_*ven 48

An IEnumerable<T>只是一系列元素; 将其视为仅向前游标.因为很多这些序列正在从数据库生成值,数据流或记录集,所以Add对它们的项目没有任何意义.

  • +1使用单词*sequence*,因为IEnumerable就是那个,而不是某种集合. (9认同)
  • 那些贬低者可以解释为什么他们贬低了? (5认同)

Bri*_*ian 11

IEnumerable 是为了阅读,而不是为了写作.


And*_*tan 10

可枚举就是这样 - 你可以枚举并发现所有项目.这并不意味着您可以添加它.

能够枚举对于许多类型的对象是通用的.例如,它由数组和集合共享.但是你不能在没有弄乱它的结构的情况下"添加"数组 - 而集合是专门为了添加和删除而构建的.

从技术上讲,你可以'添加'到一个可枚举的,但是 - 通过使用Concat<>- 但是所有这一切都创建了一个枚举器,枚举从一个可枚举到下一个 - 给出一个单一的有条件集的幻觉.