.net集合类型的接口说明与使用

本文介绍了.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的函数。

时间: 2024-12-22 12:47:34

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

浅析Java中的set集合类型及其接口的用法_java

概念首先,我们看看Set集合. (01) Set 是继承于Collection的接口.它是一个不允许有重复元素的集合. (02) AbstractSet 是一个抽象类,它继承于AbstractCollection,AbstractCollection实现了Set中的绝大部分函数,为Set的实现类提供了便利. (03) HastSet 和 TreeSet 是Set的两个实现类.     HashSet依赖于HashMap,它实际上是通过HashMap实现的.HashSet中的元素是无序的.    

为集合类型封装观察者模式

本文是<设计模式_基于C#的工程化实现及扩展>的读书笔记,部分内容直接引用该书. .   以下代码展示的是如何为集合类型封装观察者模式.这样当集合元素增加的时候,通过我们自定义集合类的内部委托,就会通知到每个感兴趣的观察者.回想观察者模式的实现原理.观察者模式就是在被观察者SubjectClass里面记录一个观察者感性趣的消息(在本例中是ObserverableDictionary类中的DictionaryEventArgs),然后通过委托通知多个对象(通知机制的原理其实是通过后期将与Subj

[Google Guava] 2.2-新集合类型

原文链接 译文链接 译者:沈义扬,校对:丁一 Guava引入了很多JDK没有的.但我们发现明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契约. Multiset 统计一个词在文档中出现了多少次,传统的做法是这样的: Map<String, Integer> counts = new HashMap<String, Integer>(); for (String word : w

Java中的collection集合类型总结_java

Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Collections). Java集合工具包框架如下图. 说明:看上面的框架图,先抓住它的主干,即Collection和Map. Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作

Swift教程之集合类型详解_Swift

Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集合.字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合. 在Swift中,数组和字典的键和值都必须明确它的类型.这意味这数组和字典不会插入一个错误的类型的值,以致于出错.这也意味着当你在数组和字典中取回数值的时候能够确定它的类型. Swift 使用确定的集合类型可以保证代码工作是不会出错,和让你在开发阶段就能更早的捕获错误. note: Swift的数组 储存不同的类型会展示出不同的行为,例如变量,常量或

关于集合类型的依赖属性问题

问题描述 请大哥们指教,我要给Canvas增加一个集合类型的依赖属性ItemSource,请问如何实现这个依赖属性的改变通知 解决方案 解决方案二:继承System.ComponentModel.INotifyPropertyChanged接口,自己实现...去看MSDN...解决方案三:UP解决方案四:楼上的大哥,依赖属性的改变通知好像多数是使用PropertyChangedCallback,你说的这个在绑定源和依赖属性之间的改变通知上是不起作用的,INotifyPropertyChanged

【Spring实战】—— 7 复杂集合类型的注入

之前讲解了Spring的基本类型和bean引用的注入,接下来学习一下复杂集合类型的注入,例如:List.Set.Map等. 对于程序员来说,掌握多种语言是基本的技能. 我们这里做了一个小例子,程序员们是一个Bean实例,而掌握的编程语言则是放入一个集合类型中进行注入. 简单的来说: List是一种按照序号标识的集合, Set与List相似但是元素不允许重复, Map则是一种自定的键值对,键值都可以是任意的类型. Bean的实现类 public class Programmer { public

C# 3.0新特性初步研究 Part4:使用集合类型初始化器

集合 集合类型初始化器(Collection Initializers) 想看一段"奇怪"的代码: 1class Program 2    { 3        static void Main(string[] args) 4        { 5            var a = new Point { x = 10, y = 13 }; 6            var b = new Point { x = 33, y = 66 }; 7 8            var

Swift语法专题五——集合类型

Swift讲解专题五--集合类型 一.引言         Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型.Array用于存放一组有序的数据,数据角标从0开始一次递增:Set用于存放一组无序的数据,数据不可以重复:Dictionary也用于存放一组无序的数据,只是其是按照键值对的方式存储,键值必须唯一.这里借用官方文档中的一张图来表示3种集合类型的特点: 二.Array类型         Array通常也被称为数组,Swift是一种类型安全语言