IEnumerable<T>实现了IEnumerable。
但是ICollection<T>没有实现ICollection。
这样做的理由是什么?或者这只是一个疏忽?
发布于 2010-03-01 10:10:10
正如尼克所说,ICollection几乎毫无用处。
这些接口只是在名称上相似,CopyTo和Count是唯一的共同属性。添加了Add、Remove、Clear、Contains和IsReadOnly,删除了IsSychronized和SyncRoot。
本质上,ICollection<T>是可变的,而ICollection不是。
有关此topic的详细信息,请参阅Krzysztof Cwalina
ICollection<T>看起来很像ICollection,但它实际上是一个非常不同的抽象。我们发现ICollection并不是很有用。同时,我们没有表示读/写非索引集合的抽象。ICollection<T>就是这样的抽象,您可以说ICollection在泛型世界中没有确切的对应对等体;IEnumerable<T>是最接近的。
发布于 2013-06-04 09:39:51
ICollection<T>和ICollection实际上是非常不同的接口,不幸的是,它们共享一个名称,没有太多其他东西。
ICollection<T>看起来很像ICollection,但它实际上是一个非常不同的抽象。我们发现ICollection并不是很有用。同时,我们没有表示读/写非索引集合的抽象。ICollection<T>就是这样的抽象,您可以说ICollection在泛型世界中没有确切的对应对等体;IEnumerable<T>是最接近的。
发布于 2010-03-01 09:13:00
首先,可能出于同样的原因,IList<T>也没有实现IList。IList<T>实现:ICollection<T>, IEnumerable<T>, IEnumerable
ICollection的某些部分并不是必需的,但在其发布后更改接口充其量也就是破坏。
看看ICollection:
public interface ICollection : IEnumerable
{
void CopyTo(Array array, int index);
int Count { get; }
bool IsSynchronized { get; }
object SyncRoot { get; }
}在大多数情况下,它不是你需要的属性,当我想要一个Collection时,我从来没有需要过它,也不想实现它。我认为这是一个陈旧的推理,但你必须向.Net团队寻求肯定的答案。
https://stackoverflow.com/questions/2353346
复制相似问题