IEnumerable、IEnumerable、ICollection、IList、ObservableCollectin、Collection关系

 

1.如果你返回的集合是只用于遍历,不可修改的,则返回IEnumerable<T>

2.如果返回的集合需要修改,如添加和删除元素,用ICollection<T>

3.如果返回的集合需要支持排序,索引等,用IList<T>

4.如果返回的集合要支持索引,但不能添加,删除元素,用ReadOnlyCollection<T>

ICollection主要针对静态集合;IList主要针对动态集合

IEnumerable<T>继承自IEnumerable

ICollection<T>继承自IEnumerable<T>

IList<T>继承自ICollection<T>

IEnumerable接口 
    实现了IEnumerable接口的集合表明该集合能够提供一个enumerator(枚举器)对象,支持当前的遍历集合。IEnumerable接口只有一个成员GetEnumerator()方法。

IEnumerator接口是只读的,包括以下三个成员:       
MoveNext()方法调整遍历指针移向集合的下一个元素。注意,遍历指针的初始位置是集合中第一个元素的前面。要指向第一个元素,必须先调用一次MoveNext()方法。该方法返回一个布尔值,如果成功遍历到下一个元素,则返回true;如果指针移出末尾,则返回false。 
Reset()方法用于设置遍历指针指向初始位置,即集合中第一个元素的前面。 
Current属性返回集合中当前对象的引用。

IEnumerable和IEnumerator的区别:

1、一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator object)。 
    2、IEnumerator object具体实现了iterator(通过MoveNext(),Reset(),Current)。 
    3、从这两个接口的用词选择上,也可以看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的class是“可枚举(enumerable)”的,但并没有说明如何实现枚举器(iterator);IEnumerator是一个实现式的接口,IEnumerator object就是一个iterator。 
    4、IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,client可以通过IEnumerable的GetEnumerator()得到IEnumerator object,在这个意义上,将GetEnumerator()看作IEnumerator object的factory method也未尝不可。

ICollection集合 
   该接口是IEnumerable接口的子接口,定义了集合的大小、IEnumerator接口和同步方法。在IEnumerable接口的基础上增加了以下功能。 
Count;该属性返回集合中元素的数目。 
CopyTo(Array   array,   int   index);该方法用于实现从集合中拷贝元素到一个一维数组中。 
 

IList接口 
   Add()和Insert()方法用于向集合中添加条目,使用索引来指定项目要插入的位置,其中首元素的索引为0;Add()将新条目添加到尾部。 
Remove()和RemoveAt()用于从列表中删除条目。Clear()用于删除所有条目。 
IndexOf和Contains()用于搜索该列表。 
Item属性用于获取或设置索引指定的值。C#中可以使用[]运算符进行访问。

IList接口和ArrayList类的目的是实现动态数组,ArrayList是IList的一个实现。

IDictionary接口 
IDictionary接口是一个包含一组”关键字/值”对的数据结构,每个值都由相应的关键字来定义。关键字和值可以是任何数据类型,关键字必须唯一且非空。 
Add()方法添加一个指定的关键字和值的条目到IDictionary接口。 
Item属性检索指定关键字所对应的值。 
Keys和Values属性分别返回包含所有关键字和值的集合。 
Remove()用于删除指定关键字对应的条目。Clear()用于删除所有条目。 
GetEnumator()返回一个IDictionaryEnumerator,可用于遍历IDictionary接口。

ObservableCollectin<T>是从Collection<T>继承而来的。

什么时候要用List<T>:要对集合数据进行处理,从中筛选数据或者排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值