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对它们的项目没有任何意义.
And*_*tan 10
可枚举就是这样 - 你可以枚举并发现所有项目.这并不意味着您可以添加它.
能够枚举对于许多类型的对象是通用的.例如,它由数组和集合共享.但是你不能在没有弄乱它的结构的情况下"添加"数组 - 而集合是专门为了添加和删除而构建的.
从技术上讲,你可以'添加'到一个可枚举的,但是 - 通过使用Concat<>- 但是所有这一切都创建了一个枚举器,枚举从一个可枚举到下一个 - 给出一个单一的有条件集的幻觉.