本文介绍了.net集合类型的接口说明与使用,内容比较简单,主要是为了理清思路以及明确集合类型作为参数和返回值时的使用规范,关于集合类型的更多讨论也可以参看:认识.NET的集合。

NET类库提供了丰富的集合数据类型,光System.Collections 命名空间就提供了:列表、队列、位数组、哈希表和字典等多种集合类型。以该命名空间下的集合类型来讲,大体可以分为两类:列表,与字典。前者按照顺序访问集合中的数据,后者提供了键值对的访问方式。

本文主要介绍了列表类型的接口说明和使用上的建议,不涉及.net2.0中的泛型,后者的接口层次与这儿的介绍类似。

接口定义:
IEnumerator
    object Current { get; }
    bool MoveNext();
    void Reset();

IEnumerable
    IEnumerator GetEnumerator();

ICollection : IEnumerable
    int Count { get; }
    bool IsSynchronized { get; }
    object SyncRoot { get; }
    void CopyTo(Array array, int index);
   
IList : ICollection, IEnumerable
    bool IsFixedSize { get; }
    bool IsReadOnly { get; }
    object this[int index] { get; set; }
    int Add(object value);
    void Clear();
    bool Contains(object value);
    int IndexOf(object value);
    void Insert(int index, object value);
    void Remove(object value);
    void RemoveAt(int index);

说明:
IEnumerator 提供了遍历数据的方法,在需要依次访问列表中的数据的情况下,使用该接口。
IEnumerable 为foreach操作提供支持,会返回IEnumerator接口对象。
ICollection   提供了条目数量属性,与拷贝到数组的方法,同时提供了线程同步支持。
IList          提供了添加,查找,删除,清空的操作,并支持按索引的访问方式,同时IList具有只读和固定长度属性,如果为只读或固定长度情况下执行新增,删除等操作会引起异常。
  
使用:
1 作为参数:
如果需要遍历列表,但不需要修改的情况下,优先使用ICollection,因为Collection比Enumerable, Enumerator在名称上更为贴切。同时,Collection提供了Count属性,在不需要遍历的情况下,即可获知列表的条目数量,这在进行一些逻辑判断时,更为有用。

例如:
        bool Foo(ICollection list)
        {
            if (list == null)
                throw new ArgumentException("参数不能为空!", "list");
           
            if (list.Count == 0)
            {
                return false;
            }
           
            foreach(object item in list)
            {
                ... option
            }
            return true;
        }
   
如果需要对列表数据进行修改,查找等操作,使用IList。

2 作为返回值: 
如果希望返回一个只读的列表,使用ICollection,反之IList。

在多数情况下,返回IList,因为IList具有更宽的接口,调用者获得一个IList类型的列表后,可以更容易的把该列表再传递给需要:ICollection或IList的函数。

转载于:https://www.cnblogs.com/jiyang/archive/2007/07/03/804483.html

.net集合类型的接口说明与使用相关推荐

  1. java集合set的使用_浅析Java中的set集合类型及其接口的用法

    概念首先,我们看看Set集合. (01) Set 是继承于Collection的接口.它是一个不允许有重复元素的集合. (02) AbstractSet 是一个抽象类,它继承于AbstractColl ...

  2. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  3. python映射类型-python2.x学习笔记(8)-映射和集合类型

    1. 字典是 Python 语言中唯一的映射类型.映射类型对象里哈希值(键) 和指向的对象(值)是一对一的关系. 2. 一个字典对象是可变的,它是一个容器类型,能存储任意个数的 Python 对象,其 ...

  4. Guava 2.2-新集合类型

    Guava引入了很多JDK没有的.但我们发现明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契约 ...

  5. spring中的依赖注入——构造函数注入、set方法注入( 更常用的方式)、复杂类型的注入/集合类型的注入

    spring中的依赖注入 依赖注入: Dependency Injection IOC的作用:降低程序间的耦合(依赖关系) 依赖关系的管理:以后都交给spring来维护.在当前类需要用到其他类的对象, ...

  6. python序列类型唯一的映射类型_python2.x学习笔记(8)-映射和集合类型

    1. 字典是 Python 语言中唯一的映射类型.映射类型对象里哈希值(键) 和指向的对象(值)是一对一的关系. 2. 一个字典对象是可变的,它是一个容器类型,能存储任意个数的 Python 对象,其 ...

  7. c++ map iterator 获取key_Java集合框架——Map接口

    第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...

  8. NHibernate自定义集合类型(上):基本实现方式

    前天一篇文章中我说NHibernate的集合类型实现有些"尴尬",它无法使用自定义集合类型,设计也有些古怪--不过在许多朋友的指点下,我意识到NHibernate是可以使用自定义集 ...

  9. C#集合类型总结和性能分析

    C#集合类型概述 集合是.NET FCL(Framework Class Library)中很重要的一部分.所有的集合类都继承自IEnumerable.集合类总体可分为一下几类:关联/非关联型集合,顺 ...

最新文章

  1. 近期活动盘点:2019清华大数据系统软件峰会(9.15)
  2. 飞得更高:(三)人不好招啊
  3. Windows GPT磁盘GUID结构详解
  4. TextView属性大全
  5. Mysql、Oracle、SQLServer等数据库参考文档免费分享下载
  6. 对一千万条数据进行排序---编程珠玑第二版 第一章
  7. Python字典和集合
  8. mac玩rust用什么画质_Mac上的活动监视器到底有什么用?你会用么?
  9. 本地Nginx+Hosts配置本地前端代码和后端代码联调
  10. java后端通过Filter过滤器解决跨域问题
  11. linux -小记(3) 问题:linux 安装epel扩展源报错
  12. 计算机网络显示红X无法连接,电脑无线网络连接不上,出现了红x❌
  13. 安徽阜阳计算机高中学校排名,安徽最强的五所高中,都是知名实力中学,考上就离名牌大学不远了!...
  14. android app 闪退的原因
  15. AndroidStudio的 Caused by java.lang.ClassNotFoundException Didn't find class com.gizwits.opensource.a
  16. 【已完结】【悲报】pip search 报错
  17. listview连接mysql_ListView 数据库 C
  18. leetcode:2463. 最小移动总距离【排序 + nmm复杂度 + 限制性dp】
  19. Android:最全面详细的性能优化攻略(含内存优化、内存泄漏、绘制优化、布局优化、图片优化、APK优化、多线程优化、列表优化等)
  20. PullAndTab组合横排滑动上落下提

热门文章

  1. python 使用__slots__来限制类的实例属性的数量
  2. hdfs集群数据迁移:使用distcp命令
  3. 关于Docker COPY指令只能使用相对路径的说明
  4. vmware NAT模式下虚拟机不能连外网解决办法
  5. Java BigDecimal类的使用入门示例
  6. Python Django 生成随机字符串UUID的使用示例
  7. Linux netstat查看网络连接状态
  8. 支付宝商户代扣2.0文档
  9. linux 查看整个根目录下各个文件占用情况
  10. Qt开发MQTT(二) 之第三方QMQTT