王朝网络
分享
 
 
 

C# 集合 <转载>

王朝学院·作者佚名  2016-05-20  
宽屏版  字体: |||超大  

C# 集合 <转载>C#集合先来了解下集合的基本信息

1、BCL中集合类型分为泛型集合与非泛型集合。

2、非泛型集合的类和接口位于System.Collections命名空间。

3、泛型集合的类和接口位于System.Collections.Generic命名空间。

ICollection接口是System.Collections命名空间中非泛型集合类的基接口,它继承自IEnumerable接口,从IEnumerable接口继承意味着实现该接口的实现类需要实现一个枚举器方法:GetEnumerator,该方法返回IEnumerator类型的数据。IDictionary和IList接口继承自ICollection作为更为专用的接口,其中IDictionary接口是键/值对接口,它的实现如HashTable类;而IList是值的集合,其成员可通过索引访问,如ArrayList类,次类集合与数组相比,可以认为是可变的集合,优点有,长度自动增长等。IEnumerable<T>和IEnumerable是所有集合或集合接口的基接口,所有集合接口或集合都继承、实现了它。其中IEnumerable是最底层的接口。在非泛型集合里存放的都是System.Object类型。

一、下面列出非泛型和泛型集合的接口

非泛型集合接口泛型集合接口说明

ICollectionICollection<T>定义所有集合的大小(Count),枚举器(foreach)和同步(copyto)方法,继承自IEnumerable

IListIList<T> 表示可按照索引单独访问的一组对象(像数组一样)

IDictionary IDictionary<T> 表示键/值对的集合

IComparer IComparer<T>定义类型为比较两个对象而实现的方法

IEqualityComparer IEqualityComparer<T>定义方法以支持对象的相等比较

IEnumerable IEnumerable<T>公开枚举器。实现了该接口意味着允许foreach语句循环访问集合中的元素

IEnumerator IEnumerator<T>支持在泛型集合上进行简单迭代

下面来详细介绍各种集合接口和集合。个人认为应该从根底说起。

先抱着MSDN来说IEnumerable,扩展方法就不说了,扩展方法跳过,留到学Linq的时候再说。

1、IEnumerable接口就一个方法,没有属性。

方法说明

GetEnumerator 返回一个循环访问集合的枚举数。实现或继承了该接口,就是为了这个方法,可以foreach遍历。

2、IEnumerable<T>接口也一样,也是就一个方法,没有属性。

方法 说明

GetEnumerator返回一个循环访问集合的枚举数。

3、ICollection接口

方法 说明

CopyTo 从特定的 Array 索引处开始,将 ICollection 的元素复制到一个 Array 中。GetEnumerator 返回一个循环访问集合的枚举数。 (继承自 IEnumerable。)

属性

Count 获取 ICollection 中包含的元素数。 原来Count的源头在这里。IsSynchronized 获取一个值,该值指示是否同步对 ICollection 的访问(线程安全)。SyncRoot 获取可用于同步 ICollection 访问的对象。

4、ICollection<T>

方法说明

Count 获取 ICollection<(Of <(T>)>) 中包含的元素数。IsReadOnly 获取一个值,该值指示 ICollection<(Of <(T>)>) 是否为只读。

属性

Add 将某项添加到 ICollection<(Of <(T>)>) 中。Clear 从 ICollection<(Of <(T>)>) 中移除所有项。Contains 确定 ICollection<(Of <(T>)>) 是否包含特定值。CopyTo 从特定的 Array 索引开始,将 ICollection<(Of <(T>)>) 的元素复制到一个 Array 中。GetEnumerator 已重载。Remove 从 ICollection<(Of <(T>)>) 中移除特定对象的第一个匹配项。

这个ICollect<T>,才开始有点集合的影子了,可以Add、Clear了,怪不得它作为泛型集合接口的基类。

5、IList

IList继承了ICollection和IEnumerable

方法说明

Add 将某项添加到 IList 中。Clear 从 IList 中移除所有项。Contains 确定 IList 是否包含特定值。CopyTo 从特定的 Array 索引处开始,将 ICollection 的元素复制到一个 Array 中。 (继承自 ICollection。)GetEnumerator 返回一个循环访问集合的枚举数。 (继承自 IEnumerable。)IndexOf 确定 IList 中特定项的索引。Insert 将一个项插入指定索引处的 IList。Remove 从 IList 中移除特定对象的第一个匹配项。RemoveAt 移除指定索引处的 IList 项。

属性

Count 获取 ICollection 中包含的元素数。 (继承自 ICollection。)IsFixedSize 获取一个值,该值指示 IList 是否具有固定大小。IsReadOnly 获取一个值,该值指示 IList 是否为只读。IsSynchronized 获取一个值,该值指示是否同步对 ICollection 的访问(线程安全)。 (继承自 ICollection。)Item获取或设置指定索引处的元素。SyncRoot 获取可用于同步 ICollection 访问的对象。 (继承自 ICollection。)

可以看到,在不断的继承过程中,这些接口不断地添加自己的东西,越继承越多,越继承越多。

6、IList<T>

IList<T>继承了ICollection<T>,IEnumerable<T>,IEnumerable

方法说明

Add 将某项添加到 ICollection<(Of <(T>)>) 中。 (继承自 ICollection<(Of <(T>)>)。)Clear 从 ICollection<(Of <(T>)>) 中移除所有项。 (继承自 ICollection<(Of <(T>)>)。)Contains 确定 ICollection<(Of <(T>)>) 是否包含特定值。 (继承自 ICollection<(Of <(T>)>)。)CopyTo 从特定的 Array 索引开始,将 ICollection<(Of <(T>)>) 的元素复制到一个 Array 中。 (继承自 ICollection<(Of <(T>)>)。)GetEnumerator 已重载。IndexOf 确定 IList<(Of <(T>)>) 中特定项的索引。Insert 将一个项插入指定索引处的 IList<(Of <(T>)>)。Remove 从 ICollection<(Of <(T>)>) 中移除特定对象的第一个匹配项。 (继承自 ICollection<(Of <(T>)>)。)RemoveAt 移除指定索引处的 IList<(Of <(T>)>) 项。

属性

Count 获取 ICollection<(Of <(T>)>) 中包含的元素数。 (继承自 ICollection<(Of <(T>)>)。)IsReadOnly 获取一个值,该值指示 ICollection<(Of <(T>)>) 是否为只读。 (继承自 ICollection<(Of <(T>)>)。)Item 获取或设置指定索引处的元素。

同样,在不断的继承中,增加了新的东西,功能也越来越强大,支持索引获取和设置就是IList<T>这个源头的。一直弄不明白,NHibernate为什么会选择这个接口来返回数据,其实这个接口的东西够用了。

7、IDictionary<TKey,TValue>接口

IDictionary<TKey,TValue>是最底层出现的键/值对集合了,相当于值集合中的ICollection<T>

方法说明

Add 已重载。Clear 从 ICollection<(Of <(T>)>) 中移除所有项。 (继承自 ICollection<(Of <(T>)>)。)Contains 确定 ICollection<(Of <(T>)>) 是否包含特定值。 (继承自 ICollection<(Of <(T>)>)。)ContainsKey确定 IDictionary<(Of <(TKey, TValue>)>) 是否包含具有指定键的元素。CopyTo 从特定的 Array 索引开始,将 ICollection<(Of <(T>)>) 的元素复制到一个 Array 中。 (继承自 ICollection<(Of <(T>)>)。)GetEnumerator 已重载。Remove 已重载。TryGetValue 获取与指定的键相关联的值。

属性

Count 获取 ICollection<(Of <(T>)>) 中包含的元素数。 (继承自 ICollection<(Of <(T>)>)。)IsReadOnly 获取一个值,该值指示 ICollection<(Of <(T>)>) 是否为只读。 (继承自 ICollection<(Of <(T>)>)。)Item 获取或设置具有指定键的元素。Keys 获取包含 IDictionary<(Of <(TKey, TValue>)>) 的键的 ICollection<(Of <(T>)>)。Values 获取包含 IDictionary<(Of <(TKey, TValue>)>) 中的值的 ICollection<(Of <(T>)>)。

该接口提供的功能和ICollection<T>差不多,其实就是键/值对的开宗立派者。

8、IDictionary

方法 说明

Add 在 IDictionary 对象中添加一个带有所提供的键和值的元素。Clear 从 IDictionary 对象中移除所有元素。Contains 确定 IDictionary 对象是否包含具有指定键的元素。CopyTo 从特定的 Array 索引处开始,将 ICollection 的元素复制到一个 Array 中。 (继承自 ICollection。)GetEnumerator 已重载。Remove 从 IDictionary 对象中移除带有指定键的元素。

属性

Count 获取 ICollection 中包含的元素数。 (继承自 ICollection。)IsFixedSize 获取一个值,该值指示 IDictionary 对象是否具有固定大小。IsReadOnly 获取一个值,该值指示 IDictionary 对象是否为只读。IsSynchronized 获取一个值,该值指示是否同步对 ICollection 的访问(线程安全)。 (继承自 ICollection。)Item 获取或设置具有指定键的元素。Keys 获取 ICollection 对象,它包含 IDictionary 对象的键。SyncRoot 获取可用于同步 ICollection 访问的对象。 (继承自 ICollection。)Values 获取 ICollection 对象,它包含 IDictionary 对象中的值。

9、ISet<T>

ISet<T>同样是继承自ICollection<T>,IEnumerable<T>,IEnumerable

方法说明

Add(T) 将某项添加到 ICollection<T> 中。 (继承自 ICollection<T>。)Add(T)向当前集内添加元素,并返回一个指示是否已成功添加元素的值。Clear从 ICollection<T> 中移除所有项。 (继承自 ICollection<T>。)Contains确定 ICollection<T> 是否包含特定值。 (继承自 ICollection<T>。)CopyTo从特定的 Array 索引开始,将 ICollection<T> 的元素复制到一个 Array 中。 (继承自 ICollection<T>。)ExceptWith从当前集内移除指定集合中的所有元素。GetEnumerator() 返回一个循环访问集合的枚举数。 (继承自 IEnumerable。)GetEnumerator() 返回一个循环访问集合的枚举器。 (继承自 IEnumerable<T>。)IntersectWith 修改当前集,使该集仅包含指定集合中也存在的元素。IsPRoperSubsetOf 确定当前的设置是否正确 (严格) 指定集合的子集。IsProperSupersetOf确定当前的设置是否正确 (严格) 指定集合中的超集。IsSubsetOf确定一个集是否为指定集合的子集。IsSupersetOf 确定当前集是否为指定集合的超集。Overlaps 确定当前集是否与指定的集合重叠。Remove 从 ICollection<T> 中移除特定对象的第一个匹配项。 (继承自 ICollection<T>。)SetEquals 确定当前集与指定的集合中是否包含相同的元素。SymmetricExceptWith 修改当前集,使该集仅包含当前集或指定集合中存在的元素(但不可包含两者共有的元素)。UnionWith 修改当前设置,以使其包含当前集或指定的集合中的所有元素。

记住这些接口之间的关系,其实是非常重要的,方法和属性记不全也无所谓,但是需要记住各自提供的功能,以及继承关系。

先说IComparer接口,这个

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有